Open64 (mfef90, whirl2f, and IR tools)  TAG: version-openad; SVN changeset: 916
utils.c
Go to the documentation of this file.
00001 /*
00002 
00003   Copyright (C) 2000, 2001 Silicon Graphics, Inc.  All Rights Reserved.
00004 
00005   This program is free software; you can redistribute it and/or modify it
00006   under the terms of version 2 of the GNU General Public License as
00007   published by the Free Software Foundation.
00008 
00009   This program is distributed in the hope that it would be useful, but
00010   WITHOUT ANY WARRANTY; without even the implied warranty of
00011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
00012 
00013   Further, this software is distributed without any warranty that it is
00014   free of the rightful claim of any third person regarding infringement 
00015   or the like.  Any license provided herein, whether implied or 
00016   otherwise, applies only to this software file.  Patent licenses, if 
00017   any, provided herein do not apply to combinations of this program with 
00018   other software, or any other product whatsoever.  
00019 
00020   You should have received a copy of the GNU General Public License along
00021   with this program; if not, write the Free Software Foundation, Inc., 59
00022   Temple Place - Suite 330, Boston MA 02111-1307, USA.
00023 
00024   Contact information:  Silicon Graphics, Inc., 1600 Amphitheatre Pky,
00025   Mountain View, CA 94043, or:
00026 
00027   http://www.sgi.com
00028 
00029   For further information regarding this notice, see:
00030 
00031   http://oss.sgi.com/projects/GenInfo/NoticeExplan
00032 
00033 */
00034 
00035 
00036 
00037 static char USMID[] = "\n@(#)5.0_pl/sources/utils.c     5.9     10/14/99 12:53:57\n";
00038 
00039 # include <stdio.h>             /* for tempnam */
00040 # include <stdlib.h>
00041 
00042 
00043 # include "defines.h"           /* Machine dependent ifdefs */
00044 
00045 # include "host.m"              /* Host machine dependent macros.*/
00046 # include "host.h"              /* Host machine dependent header.*/
00047 # include "target.m"            /* Target machine dependent macros.*/
00048 # include "target.h"            /* Target machine dependent header.*/
00049 
00050 # ifdef _ARITH_H
00051 # include "arith.h"
00052 # endif
00053 
00054 # include "globals.m"
00055 # include "tokens.m"
00056 # include "sytb.m"
00057 # include "debug.m"
00058 # include "globals.h"
00059 # include "tokens.h"
00060 # include "sytb.h"
00061 
00062 # if defined(_HOST32) && defined(_TARGET64)
00063 
00064 # define OCT_FMT "%llo"
00065 # define HEX_FMT "%llx"
00066 # define DEC_FMT "%lld"
00067 
00068 # else
00069 
00070 # define OCT_FMT "%o"
00071 # define HEX_FMT "%x"
00072 # define DEC_FMT "%d"
00073 
00074 # endif
00075 
00076 # define LLOCT_FMT "%llo"
00077 # define LLHEX_FMT "%llx"
00078 # define LLDEC_FMT "%lld"
00079 
00080 
00081 # define STR_FMT "\"%s\""
00082 
00083 # if defined(_HOST_OS_LINUX)
00084 #    define DBL_FMT "%Le"
00085 # elif defined(_HOST_OS_SOLARIS) || (defined(_HOST_OS_IRIX) || defined(_HOST_OS_LINUX))
00086 #    define DBL_FMT "%e"
00087 # else
00088 #    define DBL_FMT "%Le"
00089 # endif
00090 
00091 # define FLT_FMT "%e"
00092 
00093 
00094 /******************************************************************************\
00095 |*                                                                            *|
00096 |* Description:                                                               *|
00097 |*                                                                            *|
00098 |*      Convert a numeric or typeless constant to a string to be used in      *|
00099 |*      fprintf's.  This routine is used to avoid problems with varying       *|
00100 |*      definitions of "long" and "float" on different architectures.         *|
00101 |*      Only one long_type word is printed for Typeless constants. If the     *|
00102 |*      Typeless constant is longer than one word, then the calling routine   *|
00103 |*      must make multiple calls to convert_to_string with the address        *|
00104 |*      "the_constant" advancing by a long_type.                              *|
00105 |*                                                                            *|
00106 |* Input parameters:                                                          *|
00107 |*      the_constant : address of the constant to be "converted"              *|
00108 |*      type_idx     : the data type of the constant (index into Type Table)  *|
00109 |*                                                                            *|
00110 |* Output parameters:                                                         *|
00111 |*      result       : the_constant converted to a string (also returned as   *|
00112 |*                     the result of this function)                           *|
00113 |*                                                                            *|
00114 |* Returns:                                                                   *|
00115 |*      A character string version of the_constant (in result).               *|
00116 |*                                                                            *|
00117 \******************************************************************************/
00118 
00119 char *   convert_to_string (long_type   *the_constant,
00120                             int          type_idx,
00121                             char        *result)
00122 
00123 {
00124 
00125    int          i;
00126    int          inc;
00127    int          base;
00128    int          stat;
00129    char         str1[50];
00130    char         str2[50];
00131    long_type    value[4];
00132    long_type    value2[4];
00133    char         *fmt1;
00134 
00135 
00136    TRACE (Func_Entry, "convert_to_string", NULL);
00137 
00138    switch(TYP_LINEAR(type_idx)) {
00139 
00140 # ifdef _ARITH_INPUT_CONV
00141 
00142       case Integer_1 :
00143       case Integer_2 :
00144       case Integer_4 :
00145       case Integer_8 :
00146          for (i = 0; i < num_host_wds[TYP_LINEAR(type_idx)]; i++) {
00147             value[i] = the_constant[i];
00148          }
00149 
00150          SHIFT_ARITH_ARG(value, TYP_LINEAR(type_idx));
00151          base = 10;
00152          stat = AR_convert_int_to_str(result, 
00153                          (const int *)&base,
00154                      (const AR_DATA *)value,
00155                     (const AR_TYPE *)&linear_to_arith[TYP_LINEAR(type_idx)]);
00156          break;
00157 
00158       case Real_4 :
00159       case Real_8 :
00160       case Real_16 :
00161          for (i = 0; i < num_host_wds[TYP_LINEAR(type_idx)]; i++) {
00162             value[i] = the_constant[i];
00163          }
00164 
00165          SHIFT_ARITH_ARG(value, TYP_LINEAR(type_idx));
00166 
00167          stat = AR_convert_float_to_str(result,
00168                        (const AR_DATA *)value,
00169                       (const AR_TYPE *)&linear_to_arith[TYP_LINEAR(type_idx)]);
00170 
00171          break;
00172 
00173       case Complex_4 :
00174          value[0] = *the_constant;
00175          value2[0] = *(the_constant + 1);
00176 
00177          SHIFT_ARITH_ARG(value, Real_4);
00178          SHIFT_ARITH_ARG(value2, Real_4);
00179 
00180          stat = AR_convert_float_to_str(str1,
00181                        (const AR_DATA *)value,
00182                       (const AR_TYPE *)&linear_to_arith[Real_4]);
00183 
00184          stat = AR_convert_float_to_str(str2,
00185                        (const AR_DATA *)value2,
00186                       (const AR_TYPE *)&linear_to_arith[Real_4]);
00187 
00188          sprintf(result, "(%s,%s)", str1, str2);
00189          break;
00190 
00191       case Complex_8 :
00192 # ifdef _TARGET64
00193          inc = 1;
00194 # else
00195          inc = 2;
00196 # endif
00197          stat = AR_convert_float_to_str(str1,
00198                        (const AR_DATA *)the_constant,
00199                       (const AR_TYPE *)&linear_to_arith[Real_8]);
00200 
00201          stat = AR_convert_float_to_str(str2,
00202                        (const AR_DATA *)(the_constant + inc),
00203                       (const AR_TYPE *)&linear_to_arith[Real_8]);
00204 
00205          sprintf(result, "(%s,%s)", str1, str2);
00206          break;
00207 
00208       case Complex_16 :
00209          stat = AR_convert_float_to_str(str1,
00210                        (const AR_DATA *)the_constant,
00211                       (const AR_TYPE *)&linear_to_arith[Real_16]);
00212 
00213          stat = AR_convert_float_to_str(str2,
00214                        (const AR_DATA *)(the_constant + 2),
00215                       (const AR_TYPE *)&linear_to_arith[Real_16]);
00216 
00217          sprintf(result, "(%s,%s)", str1, str2);
00218          break;
00219 
00220 # else
00221 
00222 # ifdef _TARGET32
00223       case Integer_1 :
00224       case Integer_2 :
00225       case Integer_4 :
00226          switch (convert_to_string_fmt) {
00227 
00228             case Octal_Fmt:
00229                fmt1 = OCT_FMT;
00230                break;
00231 
00232             case Character_Fmt:
00233             case Binary_Fmt:
00234             case Hex_Fmt:
00235                fmt1 = HEX_FMT;
00236                break;
00237 
00238             case Dont_Care:
00239             default:
00240                fmt1 = DEC_FMT;
00241                break;
00242          }
00243 
00244          sprintf(result, fmt1, *the_constant);
00245          break;
00246 
00247       case Integer_8 :
00248          switch (convert_to_string_fmt) {
00249 
00250             case Octal_Fmt:
00251                fmt1 = LLOCT_FMT;
00252                break;
00253 
00254             case Character_Fmt:
00255             case Binary_Fmt:
00256             case Hex_Fmt:
00257                fmt1 = LLHEX_FMT;
00258                break;
00259 
00260             case Dont_Care:
00261             default:
00262 /*FMZH               fmt1 = LLDEC_FMT;*/
00263 /* mostly default should give hex form since the sprintf is given 
00264    2-word for integer(8) type constant this should be work well for
00265    little endian machine
00266  */
00267                fmt1 = LLHEX_FMT;
00268                break;
00269          }
00270 
00271          sprintf(result, fmt1, *(long long *)the_constant);
00272          break;
00273 
00274 # else
00275       case Integer_1 :
00276       case Integer_2 :
00277       case Integer_4 :
00278       case Integer_8 :
00279          switch (convert_to_string_fmt) {
00280 
00281             case Octal_Fmt:
00282                fmt1 = OCT_FMT;
00283                break;
00284 
00285             case Character_Fmt:
00286             case Binary_Fmt:
00287             case Hex_Fmt:
00288                fmt1 = HEX_FMT;
00289                break;
00290 
00291             case Dont_Care:
00292             default:
00293                fmt1 = DEC_FMT;
00294                break;
00295          }
00296 
00297          sprintf(result, fmt1, *the_constant);
00298          break;
00299 # endif
00300 
00301 # ifdef _TARGET64
00302       case Real_4 :
00303       case Real_8 :
00304          if (sizeof(float_type) > sizeof(float)) {
00305 #if defined(_HOST32)
00306             sprintf(result, FLT_FMT, *(float_type *)the_constant);
00307 #else
00308             sprintf(result, DBL_FMT, *(float_type *)the_constant);
00309 #endif
00310          }
00311          else {
00312             sprintf(result, FLT_FMT, *(float_type *)the_constant);
00313          }
00314          break;
00315 
00316       case Real_16 :
00317          sprintf(result, DBL_FMT, *(ldouble *)the_constant);
00318          break;
00319 
00320       case Complex_4 :
00321       case Complex_8 :
00322          inc = (TYP_LINEAR(type_idx) > COMPLEX_DEFAULT_TYPE) ? 2 : 1;
00323 
00324          if (sizeof(float_type) > sizeof(float)) {
00325 #if defined(_HOST32)
00326             sprintf(result, "(" FLT_FMT ", " FLT_FMT ")",
00327                                            *(float_type *)the_constant,
00328                                            *(float_type *)(the_constant + inc));
00329 #else
00330             sprintf(result, "(" DBL_FMT ", " DBL_FMT ")",
00331                                            *(float_type *)the_constant,
00332                                            *(float_type *)(the_constant + inc));
00333 #endif
00334          }
00335          else {
00336             sprintf(result, "(" FLT_FMT ", " FLT_FMT ")",
00337                                            *(float_type *)the_constant,
00338                                            *(float_type *)(the_constant + inc));
00339          }
00340          break;
00341 
00342       case Complex_16 :
00343          inc = (TYP_LINEAR(type_idx) > COMPLEX_DEFAULT_TYPE) ? 2 : 1;
00344 
00345          sprintf(result, "(" DBL_FMT ", " DBL_FMT ")",
00346                                         *(ldouble *)the_constant,
00347                                         *(ldouble *)(the_constant + inc));
00348          break;
00349 
00350 # else 
00351       case Real_4 :
00352          sprintf(result, FLT_FMT, *(float *)the_constant);
00353          break;
00354 
00355       case Real_8 :
00356 # if defined(_HOST_OS_LINUX)
00357          sprintf(result, FLT_FMT, *(double *)the_constant);
00358          break;
00359 # endif
00360 
00361       case Real_16 :
00362          if (sizeof(ldouble) > sizeof(float)) {
00363             sprintf(result, DBL_FMT, *(ldouble *)the_constant);
00364          }
00365          else {
00366             sprintf(result, FLT_FMT, *(float_type *)the_constant);
00367          }
00368          break;
00369 
00370       case Complex_4 :
00371          inc = (TYP_LINEAR(type_idx) > COMPLEX_DEFAULT_TYPE) ? 2 : 1;
00372 
00373          sprintf(result, "(" FLT_FMT ", " FLT_FMT ")",
00374                                         *(float_type *)the_constant,
00375                                         *(float_type *)(the_constant + inc));
00376          break;
00377 
00378       case Complex_8 :
00379       case Complex_16 :
00380          inc = (TYP_LINEAR(type_idx) > COMPLEX_DEFAULT_TYPE) ? 2 : 1;
00381 
00382          if (sizeof(ldouble) > sizeof(float)) {
00383             sprintf(result, "(" DBL_FMT ", " DBL_FMT ")",
00384                                            *(ldouble *)the_constant,
00385                                            *(ldouble *)(the_constant + inc));
00386          }
00387          break;
00388 # endif
00389 # endif
00390 
00391       case Typeless_4:
00392       case Typeless_8:
00393       case Short_Typeless_Const:
00394       case Long_Typeless:
00395          if (convert_to_string_fmt == Hex_Fmt) {
00396             fmt1 = HEX_FMT;
00397          }
00398          else {
00399             fmt1 = OCT_FMT;
00400          }
00401 
00402          /* only one word is printed */
00403 
00404          sprintf(result, fmt1, *the_constant);
00405          break;
00406 
00407       case Character_1:
00408          *result = (char) *the_constant;
00409          break;
00410 
00411       case Logical_1:
00412       case Logical_2:
00413       case Logical_4:
00414       case Logical_8:
00415          if (THIS_IS_TRUE(the_constant, type_idx)) {
00416             sprintf(result, ".T.");
00417          }
00418          else {
00419             sprintf(result, ".F.");
00420          }
00421          break;
00422 
00423       default :
00424          PRINTMSG(stmt_start_line, 626, Internal, stmt_start_col,
00425                   "valid type", "convert_to_string");
00426       
00427    }
00428 
00429    convert_to_string_fmt = Dont_Care;
00430 
00431    TRACE (Func_Exit, "convert_to_string", NULL);
00432 
00433    return(result);
00434 
00435 }  /* convert_to_string */
00436 
00437 
00438 /******************************************************************************\
00439 |*                                                                            *|
00440 |* Description:                                                               *|
00441 |*      ALL compiler temporary files should be created by this routine so     *|
00442 |*      their location can be controlled by TMPDIR.                           *|
00443 |*                                                                            *|
00444 |*      Use UNIX function "tempnam" to produce a unique file name.  The first *|
00445 |*      argument to tempnam points to a name of a directory in which the file *|
00446 |*      is to be created.  Since we set this argument to NULL, tempname will  *|
00447 |*      use the path in P_tmpdir in <stdio.h>.  If that directory is not      *|
00448 |*      available, /tmp will be used.  The user can override this sequence by *|
00449 |*      using environment variable TMPDIR to specify what directory they want *|
00450 |*      the file to be created in.  The second argument allows for a file     *|
00451 |*      name prefix.  Although tempnam tries to produce a unique name and     *|
00452 |*      normally creates the file in a temp directory that should be scrubbed *|
00453 |*      reasonably often by the system administrator, we have seen the names  *|
00454 |*      roll over and clash with existing names.  The second argument could   *|
00455 |*      be used to prefix the file name with the month and day for example    *|
00456 |*      (the complete month, day, and year are too large since only 5 prefix  *|
00457 |*      characters are allowed.                                               *|
00458 |*                                                                            *|
00459 |* Input parameters:                                                          *|
00460 |*      open_status : the file access method(s)                               *|
00461 |*      file_name   : if NULL, ignore this argument; otherwise, return the    *|
00462 |*                    file name in it                                         *|
00463 |*                                                                            *|
00464 |* Output parameters:                                                         *|
00465 |*      file_ptr  : set to point to the temporary file                        *|
00466 |*      file_name : returns the temporary file name                           *|
00467 |*                                                                            *|
00468 |* Returns:                                                                   *|
00469 |*      TRUE if the temporary file could be created and opened; otherwise,    *|
00470 |*      returns FALSE.                                                        *|
00471 |*                                                                            *|
00472 \******************************************************************************/
00473 
00474 
00475 boolean get_temp_file(char       *open_status,
00476                       FILE      **file_ptr,
00477                       char       *file_name)
00478 {
00479    boolean      result;
00480    char tmp_file_name[MAXPATHLEN];
00481    int fd_temp;
00482    FILE *tmp_file_ptr;
00483 
00484    TRACE (Func_Entry, "get_temp_file", NULL);
00485 
00486    result = FALSE;
00487    fd_temp = -1;
00488    strcpy(tmp_file_name, "/tmp/Open64_XXXXXX");
00489    fd_temp = mkstemp(tmp_file_name);
00490    
00491    if (fd_temp != -1) {
00492      *file_ptr = fdopen(fd_temp, /*"rw"*/ open_status);
00493      if (*file_ptr != NULL) {
00494        result = TRUE;
00495      }
00496      if (file_name != NULL) {
00497        strcpy(file_name, tmp_file_name);
00498      }
00499    }
00500 
00501 
00502    /*
00503    tmp_file_name = (char *) tempnam(NULL, NULL);
00504 
00505 
00506    if (tmp_file_name != NULL) {
00507    
00508       if (file_name != NULL) {
00509          strcpy(file_name, tmp_file_name);
00510       }
00511 
00512       if ((*file_ptr = fopen(tmp_file_name, open_status)) != NULL) {
00513          result = TRUE;
00514       }
00515    }
00516    */
00517 
00518    TRACE (Func_Exit, "get_temp_file", NULL);
00519 
00520    return(result);
00521 
00522 }  /* get_temp_file */
00523 
00524 /******************************************************************************\
00525 |*                                                                            *|
00526 |* Description:                                                               *|
00527 |*      srch_name_tbl searches a name table for the identifier or label       *|
00528 |*      specified in name_str.                                                *|
00529 |*                                                                            *|
00530 |* Input parameters:                                                          *|
00531 |*      name_str    -> The string to search for.                              *|
00532 |*      name_len    -> The length of string to search for.                    *|
00533 |*      table       -> The name table to search in.  This currently could be  *|
00534 |*                     loc_name_tbl, global_name_tbl, hidden_name_tbl or      *|
00535 |*                     cc_name_tbl.                                           *|
00536 |*      pool        -> The pool that the table uses (str_pool or name_pool)   *|
00537 |*      first_entry -> The first entry of the name table.                     *|
00538 |*      last_entry  -> The last entry of the name table.                      *|
00539 |*                                                                            *|
00540 |* Output parameters:                                                         *|
00541 |*      name_idx    -> The name table index where the match occured           *|
00542 |*                     or where entry should be inserted                      *|
00543 |*                                                                            *|
00544 |* Returns:                                                                   *|
00545 |*      The test value.  non zero means found, zero means not found.          *|
00546 |*                                                                            *|
00547 |* Method:                                                                    *|
00548 |*       The word length of the identifier is calculated (id_len).  This is   *|
00549 |*       used to determine the number of words to compare in the name pool.   *|
00550 |*       The local name table is a sorted table (alphabetically) of links     *|
00551 |*       between the name pool and the attribute table.  The body of the      *|
00552 |*       routine is a switch statement based on id_len.                       *|
00553 |*                                                                            *|
00554 |*       The search samples local name table entries at a stride calculated   *|
00555 |*       so that the loop is a shortloop (<= vector length).  The compare     *|
00556 |*       is long integer subtraction, a word at a time.  When the sign of     *|
00557 |*       the result goes positive, the search has gone too far, or if the     *|
00558 |*       result is zero, there has been a match.  If there was not a match,   *|
00559 |*       the search area becomes the entries in the table between the two     *|
00560 |*       entries sampled where the sign has changed from negative to          *|
00561 |*       positive.  This process continues until the stride between samplings *|
00562 |*       is 1.  At this point, if no match is found, the entry where the      *|
00563 |*       sign bit changed is the point where the new identifier should be     *|
00564 |*       entered.  As an optimization, once a segment length for searching    *|
00565 |*       is 32 or less, the search goes immediately to stride 1 search.       *|
00566 |*                                                                            *|
00567 |*       The above describes the basic search method for 1 word identifiers.  *|
00568 |*       For more than one word, the first word is compared.  A mask is       *|
00569 |*       created which is all ones (-1) if the first words did not match,,    *|
00570 |*       and zero if they matched.  The second words are compared and the     *|
00571 |*       result anded bitwise with the complement of the mask; thus if        *|
00572 |*       there was a difference in the first word, any difference in the      *|
00573 |*       second word is ignored.  The mask is recalculated based on the       *|
00574 |*       result of the compares of the first two words, and the process is    *|
00575 |*       repeated, until all words are compared.  The net result is to        *|
00576 |*       carry forward a running difference, which carries the sign bit of    *|
00577 |*       the first word of the compare which was not a match.  The general    *|
00578 |*       computation of masks and differences is as follows:                  *|
00579 |*                                                                            *|
00580 |*       diff(i) = name_pool_word(i) - identifier_word(i)                     *|
00581 |*                                                                            *|
00582 |*       rdiff(0) = 0                                                         *|
00583 |*       mask(0)  = 0                                                         *|
00584 |*       ...                                                                  *|
00585 |*       rdiff(i) = rdiff(i-1) | ((~mask(i-1)) & diff(i))                     *|
00586 |*       mask(i)  = -(sign_bit_of(diff(i) | -(diff(i)) | mask(i-1)            *|
00587 |*                                                                            *|
00588 |*       The variable tst_val accumulates the running differences, mask       *|
00589 |*       contains the current mask.  Since the values of rdiff(0) and         *|
00590 |*       mask(0) are both 0, the computation of rdiff(1) and mask(1) have     *|
00591 |*       have been optimized to remove the following unneeded calculations.   *|
00592 |*                                                                            *|
00593 |*         0 | anything = anything;  ~0 = -1;  -1 & anything = anything       *|
00594 |*                                                                            *|
00595 \******************************************************************************/
00596 
00597 int srch_name_tbl(char                 *name_str,
00598                   int                   name_len,
00599                   int                  *name_idx,
00600                   name_tbl_type        *table,
00601                   name_pool_type       *pool,
00602                   int                   first_entry,
00603                   int                   last_entry)
00604 
00605 {
00606    register int          first;         /* 1st word index of search segment */
00607    register long        *id ;           /* pointer to 1st word of identifier */
00608    register int          id_len;        /* word length of identifier */
00609    register int          idx;           /* name table index */
00610    register int          last;          /* last word index of search segment */
00611    register long         mask;          /* mask used in search */
00612    register int          seg_len;       /* number of entries in search segment*/
00613    register int          stride;        /* search stride between entries */
00614    register long         tst_val;       /* result of name comparison */
00615 
00616 # if defined(_HOST64) && !defined(_WHIRL_HOST64_TARGET64)
00617    register long        *name_tbl_base; /* name table base address */
00618 # endif
00619 
00620 /*********************************************************************/
00621 /*  Specific macros needed for this routine.  These macros reference */
00622 /*  variable declared in this routine.                               */
00623 /*********************************************************************/
00624 
00625 /* Warning: for optimization purposes, don't remove parens around DIFF macro */
00626 
00627 # if defined(_HOST64) && !defined(_WHIRL_HOST64_TARGET64)
00628 # define NAME_IDX(IDX)         (name_tbl_base[IDX] & MSK_NAME_IDX)
00629 # else
00630 # define NAME_IDX(IDX)         (table[IDX].name_idx)
00631 # endif
00632 
00633 # if defined(_HOST_LITTLE_ENDIAN)
00634 # define DIFF(I) compare_names(&pool[NAME_IDX(idx)+(I)-1].name_long,           \
00635                                HOST_BYTES_PER_WORD-1,                          \
00636                                &id[(I) - 1],                                   \
00637                                HOST_BYTES_PER_WORD-1 )
00638 # else
00639 # define DIFF(I)  (pool[NAME_IDX(idx) + (I) - 1].name_long - id[(I) - 1])
00640 # endif
00641 
00642 # define MASK(I)  -(RIGHT_JUSTIFY_SIGN_BIT(DIFF((I)) | -DIFF((I))))| mask
00643 
00644 # define RUNNING_DIFF(I)                tst_val | ((~mask) & DIFF(I))
00645 
00646 /***************************/
00647 /*  End macro definitions. */
00648 /***************************/
00649 
00650    TRACE (Func_Entry, "srch_name_tbl", name_str);
00651 
00652    /* initialize first and last word of segment and segment length for search */
00653 
00654 # if defined(_HOST64) && !defined(_WHIRL_HOST64_TARGET64)
00655    name_tbl_base = (long *) table;
00656 # endif
00657    id            = (long *) name_str;
00658    first         = first_entry;
00659    last          = last_entry;
00660    seg_len       = last - first + 1;
00661    id_len        = WORD_LEN(name_len);
00662    stride        = STRIDE_CALC(seg_len);
00663    tst_val       = -1;
00664    mask          = 0;
00665 
00666    switch (id_len) {
00667       case 1:
00668          while (seg_len > 32) {
00669             for (idx = first + stride -1 ; idx <= last; idx += stride) {
00670                tst_val = DIFF(1);
00671                if (tst_val >= 0) {
00672                   break;
00673                }
00674             }  /* for */
00675             if (tst_val == 0) {
00676                 goto EXIT;
00677             }
00678             else if (tst_val > 0) {
00679                last = idx;
00680             }
00681             first   = idx - stride + 1;
00682             seg_len = last - first + 1;
00683             stride  = STRIDE_CALC(seg_len);
00684          }  /* end while seg_len > 32  */
00685 
00686          for (idx = first; idx <= last; idx += 1) {
00687 /*
00688             fprintf(stderr, "idx = %d, name_idx = %d, %d, value = %ld\n",
00689                     idx, table[idx].name_idx, NAME_IDX(idx),
00690                     pool[NAME_IDX(idx)].name_long);
00691 */
00692             tst_val = DIFF(1);
00693             if (tst_val >= 0) {
00694                break;
00695             }
00696          }
00697          break;
00698 
00699       case 2:
00700          while (seg_len > 32) {
00701             for (idx = first + stride -1 ; idx <= last; idx += stride) {
00702                tst_val = DIFF(1);
00703                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00704                tst_val = RUNNING_DIFF(2);
00705                if (tst_val >= 0) {
00706                   break;
00707                }
00708             }  /* for */
00709             if (tst_val == 0) {
00710                 goto EXIT;
00711             }
00712             else if (tst_val > 0) {
00713                last = idx;
00714             }
00715             first   = idx - stride + 1;
00716             seg_len = last - first + 1;
00717             stride  = STRIDE_CALC(seg_len);
00718          }  /* end while seg_len > 32  */
00719 
00720          for (idx = first; idx <= last; idx += 1) {
00721             tst_val = DIFF(1);
00722             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00723             tst_val = RUNNING_DIFF(2);
00724             if (tst_val >= 0) {
00725                break;
00726             }
00727          }
00728          break;
00729 
00730       case 3:
00731          while (seg_len > 32) {
00732             for (idx = first + stride -1 ; idx <= last; idx += stride) {
00733                tst_val = DIFF(1);
00734                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00735                tst_val = RUNNING_DIFF(2);
00736                mask    = MASK(2);
00737                tst_val = RUNNING_DIFF(3);
00738                if (tst_val >= 0) {
00739                   break;
00740                }
00741             }  /* for */
00742             if (tst_val == 0) {
00743                 goto EXIT;
00744             }
00745             else if (tst_val > 0) {
00746                last = idx;
00747             }
00748             first   = idx - stride + 1;
00749             seg_len = last - first + 1;
00750             stride  = STRIDE_CALC(seg_len);
00751          }  /* end while seg_len > 32  */
00752 
00753          for (idx = first; idx <= last; idx += 1) {
00754             tst_val = DIFF(1);
00755             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00756             tst_val = RUNNING_DIFF(2);
00757             mask    = MASK(2);
00758             tst_val = RUNNING_DIFF(3);
00759             if (tst_val >= 0) {
00760                break;
00761             }
00762          }
00763          break;
00764 
00765       case 4:
00766          while (seg_len > 32) {
00767             for (idx = first + stride -1 ; idx <= last; idx += stride) {
00768                tst_val = DIFF(1);
00769                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00770                tst_val = RUNNING_DIFF(2);
00771                mask    = MASK(2);
00772                tst_val = RUNNING_DIFF(3);
00773                mask    = MASK(3);
00774                tst_val = RUNNING_DIFF(4);
00775                if (tst_val >= 0) {
00776                   break;
00777                }
00778             }  /* for */
00779             if (tst_val == 0) {
00780                 goto EXIT;
00781             }
00782             else if (tst_val > 0) {
00783                last = idx;
00784             }
00785             first   = idx - stride + 1;
00786             seg_len = last - first + 1;
00787             stride  = STRIDE_CALC(seg_len);
00788          }  /* end while seg_len > 32  */
00789 
00790          for (idx = first; idx <= last; idx += 1) {
00791             tst_val = DIFF(1);
00792             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00793             tst_val = RUNNING_DIFF(2);
00794             mask    = MASK(2);
00795             tst_val = RUNNING_DIFF(3);
00796             mask    = MASK(3);
00797             tst_val = RUNNING_DIFF(4);
00798             if (tst_val >= 0) {
00799                break;
00800             }
00801          }
00802          break;
00803 
00804       case 5:
00805          while (seg_len > 32) {
00806             for (idx = first + stride -1 ; idx <= last; idx += stride) {
00807                tst_val = DIFF(1);
00808                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00809                tst_val = RUNNING_DIFF(2);
00810                mask    = MASK(2);
00811                tst_val = RUNNING_DIFF(3);
00812                mask    = MASK(3);
00813                tst_val = RUNNING_DIFF(4);
00814                mask    = MASK(4);
00815                tst_val = RUNNING_DIFF(5);
00816                if (tst_val >= 0) {
00817                   break;
00818                }
00819             }  /* for */
00820             if (tst_val == 0) {
00821                 goto EXIT;
00822             }
00823             else if (tst_val > 0) {
00824                last = idx;
00825             }
00826             first   = idx - stride + 1;
00827             seg_len = last - first + 1;
00828             stride  = STRIDE_CALC(seg_len);
00829          }  /* end while seg_len > 32  */
00830 
00831          for (idx = first; idx <= last; idx += 1) {
00832             tst_val = DIFF(1);
00833             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00834             tst_val = RUNNING_DIFF(2);
00835             mask    = MASK(2);
00836             tst_val = RUNNING_DIFF(3);
00837             mask    = MASK(3);
00838             tst_val = RUNNING_DIFF(4);
00839             mask    = MASK(4);
00840             tst_val = RUNNING_DIFF(5);
00841             if (tst_val >= 0) {
00842                break;
00843             }
00844          }
00845          break;
00846 
00847       case 6:
00848          while (seg_len > 32) {
00849             for (idx = first + stride -1 ; idx <= last; idx += stride) {
00850                tst_val = DIFF(1);
00851                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00852                tst_val = RUNNING_DIFF(2);
00853                mask    = MASK(2);
00854                tst_val = RUNNING_DIFF(3);
00855                mask    = MASK(3);
00856                tst_val = RUNNING_DIFF(4);
00857                mask    = MASK(4);
00858                tst_val = RUNNING_DIFF(5);
00859                mask    = MASK(5);
00860                tst_val = RUNNING_DIFF(6);
00861                if (tst_val >= 0) {
00862                   break;
00863                }
00864             }  /* for */
00865             if (tst_val == 0) {
00866                 goto EXIT;
00867             }
00868             else if (tst_val > 0) {
00869                last = idx;
00870             }
00871             first   = idx - stride + 1;
00872             seg_len = last - first + 1;
00873             stride  = STRIDE_CALC(seg_len);
00874          }  /* end while seg_len > 32  */
00875 
00876          for (idx = first; idx <= last; idx += 1) {
00877             tst_val = DIFF(1);
00878             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00879             tst_val = RUNNING_DIFF(2);
00880             mask    = MASK(2);
00881             tst_val = RUNNING_DIFF(3);
00882             mask    = MASK(3);
00883             tst_val = RUNNING_DIFF(4);
00884             mask    = MASK(4);
00885             tst_val = RUNNING_DIFF(5);
00886             mask    = MASK(5);
00887             tst_val = RUNNING_DIFF(6);
00888             if (tst_val >= 0) {
00889                break;
00890             }
00891          }
00892          break;
00893 
00894       case 7:
00895          while (seg_len > 32) {
00896             for (idx = first + stride -1 ; idx <= last; idx += stride) {
00897                tst_val = DIFF(1);
00898                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00899                tst_val = RUNNING_DIFF(2);
00900                mask    = MASK(2);
00901                tst_val = RUNNING_DIFF(3);
00902                mask    = MASK(3);
00903                tst_val = RUNNING_DIFF(4);
00904                mask    = MASK(4);
00905                tst_val = RUNNING_DIFF(5);
00906                mask    = MASK(5);
00907                tst_val = RUNNING_DIFF(6);
00908                mask    = MASK(6);
00909                tst_val = RUNNING_DIFF(7);
00910                if (tst_val >= 0) {
00911                   break;
00912                }
00913             }  /* for */
00914             if (tst_val == 0) {
00915                 goto EXIT;
00916             }
00917             else if (tst_val > 0) {
00918                last = idx;
00919             }
00920             first   = idx - stride + 1;
00921             seg_len = last - first + 1;
00922             stride  = STRIDE_CALC(seg_len);
00923          }  /* end while seg_len > 32  */
00924 
00925          for (idx = first; idx <= last; idx += 1) {
00926             tst_val = DIFF(1);
00927             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00928             tst_val = RUNNING_DIFF(2);
00929             mask    = MASK(2);
00930             tst_val = RUNNING_DIFF(3);
00931             mask    = MASK(3);
00932             tst_val = RUNNING_DIFF(4);
00933             mask    = MASK(4);
00934             tst_val = RUNNING_DIFF(5);
00935             mask    = MASK(5);
00936             tst_val = RUNNING_DIFF(6);
00937             mask    = MASK(6);
00938             tst_val = RUNNING_DIFF(7);
00939             if (tst_val >= 0) {
00940                break;
00941             }
00942          }
00943          break;
00944 
00945       case 8:
00946          while (seg_len > 32) {
00947             for (idx = first + stride -1 ; idx <= last; idx += stride) {
00948                tst_val = DIFF(1);
00949                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00950                tst_val = RUNNING_DIFF(2);
00951                mask    = MASK(2);
00952                tst_val = RUNNING_DIFF(3);
00953                mask    = MASK(3);
00954                tst_val = RUNNING_DIFF(4);
00955                mask    = MASK(4);
00956                tst_val = RUNNING_DIFF(5);
00957                mask    = MASK(5);
00958                tst_val = RUNNING_DIFF(6);
00959                mask    = MASK(6);
00960                tst_val = RUNNING_DIFF(7);
00961                mask    = MASK(7);
00962                tst_val = RUNNING_DIFF(8);
00963                if (tst_val >= 0) {
00964                   break;
00965                }
00966             }  /* for */
00967             if (tst_val == 0) {
00968                 goto EXIT;
00969             }
00970             else if (tst_val > 0) {
00971                last = idx;
00972             }
00973             first   = idx - stride + 1;
00974             seg_len = last - first + 1;
00975             stride  = STRIDE_CALC(seg_len);
00976          }  /* end while seg_len > 32  */
00977 
00978          for (idx = first; idx <= last; idx += 1) {
00979             tst_val = DIFF(1);
00980             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
00981             tst_val = RUNNING_DIFF(2);
00982             mask    = MASK(2);
00983             tst_val = RUNNING_DIFF(3);
00984             mask    = MASK(3);
00985             tst_val = RUNNING_DIFF(4);
00986             mask    = MASK(4);
00987             tst_val = RUNNING_DIFF(5);
00988             mask    = MASK(5);
00989             tst_val = RUNNING_DIFF(6);
00990             mask    = MASK(6);
00991             tst_val = RUNNING_DIFF(7);
00992             mask    = MASK(7);
00993             tst_val = RUNNING_DIFF(8);
00994             if (tst_val >= 0) {
00995                break;
00996             }
00997          }
00998          break;
00999 
01000       case 9:
01001          while (seg_len > 32) {
01002             for (idx = first + stride -1 ; idx <= last; idx += stride) {
01003                tst_val = DIFF(1);
01004                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01005                tst_val = RUNNING_DIFF(2);
01006                mask    = MASK(2);
01007                tst_val = RUNNING_DIFF(3);
01008                mask    = MASK(3);
01009                tst_val = RUNNING_DIFF(4);
01010                mask    = MASK(4);
01011                tst_val = RUNNING_DIFF(5);
01012                mask    = MASK(5);
01013                tst_val = RUNNING_DIFF(6);
01014                mask    = MASK(6);
01015                tst_val = RUNNING_DIFF(7);
01016                mask    = MASK(7);
01017                tst_val = RUNNING_DIFF(8);
01018                mask    = MASK(8);
01019                tst_val = RUNNING_DIFF(9);
01020                if (tst_val >= 0) {
01021                   break;
01022                }
01023             }  /* for */
01024             if (tst_val == 0) {
01025                 goto EXIT;
01026             }
01027             else if (tst_val > 0) {
01028                last = idx;
01029             }
01030             first   = idx - stride + 1;
01031             seg_len = last - first + 1;
01032             stride  = STRIDE_CALC(seg_len);
01033          }  /* end while seg_len > 32  */
01034 
01035          for (idx = first; idx <= last; idx += 1) {
01036             tst_val = DIFF(1);
01037             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01038             tst_val = RUNNING_DIFF(2);
01039             mask    = MASK(2);
01040             tst_val = RUNNING_DIFF(3);
01041             mask    = MASK(3);
01042             tst_val = RUNNING_DIFF(4);
01043             mask    = MASK(4);
01044             tst_val = RUNNING_DIFF(5);
01045             mask    = MASK(5);
01046             tst_val = RUNNING_DIFF(6);
01047             mask    = MASK(6);
01048             tst_val = RUNNING_DIFF(7);
01049             mask    = MASK(7);
01050             tst_val = RUNNING_DIFF(8);
01051             mask    = MASK(8);
01052             tst_val = RUNNING_DIFF(9);
01053             if (tst_val >= 0) {
01054                break;
01055             }
01056          }
01057          break;
01058 
01059       case 10:
01060          while (seg_len > 32) {
01061             for (idx = first + stride -1 ; idx <= last; idx += stride) {
01062                tst_val = DIFF(1);
01063                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01064                tst_val = RUNNING_DIFF(2);
01065                mask    = MASK(2);
01066                tst_val = RUNNING_DIFF(3);
01067                mask    = MASK(3);
01068                tst_val = RUNNING_DIFF(4);
01069                mask    = MASK(4);
01070                tst_val = RUNNING_DIFF(5);
01071                mask    = MASK(5);
01072                tst_val = RUNNING_DIFF(6);
01073                mask    = MASK(6);
01074                tst_val = RUNNING_DIFF(7);
01075                mask    = MASK(7);
01076                tst_val = RUNNING_DIFF(8);
01077                mask    = MASK(8);
01078                tst_val = RUNNING_DIFF(9);
01079                mask    = MASK(9);
01080                tst_val = RUNNING_DIFF(10);
01081                if (tst_val >= 0) {
01082                   break;
01083                }
01084             }  /* for */
01085             if (tst_val == 0) {
01086                 goto EXIT;
01087             }
01088             else if (tst_val > 0) {
01089                last = idx;
01090             }
01091             first   = idx - stride + 1;
01092             seg_len = last - first + 1;
01093             stride  = STRIDE_CALC(seg_len);
01094          }  /* end while seg_len > 32  */
01095 
01096          for (idx = first; idx <= last; idx += 1) {
01097             tst_val = DIFF(1);
01098             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01099             tst_val = RUNNING_DIFF(2);
01100             mask    = MASK(2);
01101             tst_val = RUNNING_DIFF(3);
01102             mask    = MASK(3);
01103             tst_val = RUNNING_DIFF(4);
01104             mask    = MASK(4);
01105             tst_val = RUNNING_DIFF(5);
01106             mask    = MASK(5);
01107             tst_val = RUNNING_DIFF(6);
01108             mask    = MASK(6);
01109             tst_val = RUNNING_DIFF(7);
01110             mask    = MASK(7);
01111             tst_val = RUNNING_DIFF(8);
01112             mask    = MASK(8);
01113             tst_val = RUNNING_DIFF(9);
01114             mask    = MASK(9);
01115             tst_val = RUNNING_DIFF(10);
01116             if (tst_val >= 0) {
01117                break;
01118             }
01119          }
01120          break;
01121 
01122       case 11:
01123          while (seg_len > 32) {
01124             for (idx = first + stride -1 ; idx <= last; idx += stride) {
01125                tst_val = DIFF(1);
01126                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01127                tst_val = RUNNING_DIFF(2);
01128                mask    = MASK(2);
01129                tst_val = RUNNING_DIFF(3);
01130                mask    = MASK(3);
01131                tst_val = RUNNING_DIFF(4);
01132                mask    = MASK(4);
01133                tst_val = RUNNING_DIFF(5);
01134                mask    = MASK(5);
01135                tst_val = RUNNING_DIFF(6);
01136                mask    = MASK(6);
01137                tst_val = RUNNING_DIFF(7);
01138                mask    = MASK(7);
01139                tst_val = RUNNING_DIFF(8);
01140                mask    = MASK(8);
01141                tst_val = RUNNING_DIFF(9);
01142                mask    = MASK(9);
01143                tst_val = RUNNING_DIFF(10);
01144                mask    = MASK(10);
01145                tst_val = RUNNING_DIFF(11);
01146                if (tst_val >= 0) {
01147                   break;
01148                }
01149             }  /* for */
01150             if (tst_val == 0) {
01151                 goto EXIT;
01152             }
01153             else if (tst_val > 0) {
01154                last = idx;
01155             }
01156             first   = idx - stride + 1;
01157             seg_len = last - first + 1;
01158             stride  = STRIDE_CALC(seg_len);
01159          }  /* end while seg_len > 32  */
01160 
01161          for (idx = first; idx <= last; idx += 1) {
01162             tst_val = DIFF(1);
01163             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01164             tst_val = RUNNING_DIFF(2);
01165             mask    = MASK(2);
01166             tst_val = RUNNING_DIFF(3);
01167             mask    = MASK(3);
01168             tst_val = RUNNING_DIFF(4);
01169             mask    = MASK(4);
01170             tst_val = RUNNING_DIFF(5);
01171             mask    = MASK(5);
01172             tst_val = RUNNING_DIFF(6);
01173             mask    = MASK(6);
01174             tst_val = RUNNING_DIFF(7);
01175             mask    = MASK(7);
01176             tst_val = RUNNING_DIFF(8);
01177             mask    = MASK(8);
01178             tst_val = RUNNING_DIFF(9);
01179             mask    = MASK(9);
01180             tst_val = RUNNING_DIFF(10);
01181             mask    = MASK(10);
01182             tst_val = RUNNING_DIFF(11);
01183             if (tst_val >= 0) {
01184                break;
01185             }
01186          }
01187          break;
01188 
01189       case 12:
01190          while (seg_len > 32) {
01191             for (idx = first + stride -1 ; idx <= last; idx += stride) {
01192                tst_val = DIFF(1);
01193                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01194                tst_val = RUNNING_DIFF(2);
01195                mask    = MASK(2);
01196                tst_val = RUNNING_DIFF(3);
01197                mask    = MASK(3);
01198                tst_val = RUNNING_DIFF(4);
01199                mask    = MASK(4);
01200                tst_val = RUNNING_DIFF(5);
01201                mask    = MASK(5);
01202                tst_val = RUNNING_DIFF(6);
01203                mask    = MASK(6);
01204                tst_val = RUNNING_DIFF(7);
01205                mask    = MASK(7);
01206                tst_val = RUNNING_DIFF(8);
01207                mask    = MASK(8);
01208                tst_val = RUNNING_DIFF(9);
01209                mask    = MASK(9);
01210                tst_val = RUNNING_DIFF(10);
01211                mask    = MASK(10);
01212                tst_val = RUNNING_DIFF(11);
01213                mask    = MASK(11);
01214                tst_val = RUNNING_DIFF(12);
01215                if (tst_val >= 0) {
01216                   break;
01217                }
01218             }  /* for */
01219             if (tst_val == 0) {
01220                 goto EXIT;
01221             }
01222             else if (tst_val > 0) {
01223                last = idx;
01224             }
01225             first   = idx - stride + 1;
01226             seg_len = last - first + 1;
01227             stride  = STRIDE_CALC(seg_len);
01228          }  /* end while seg_len > 32  */
01229 
01230          for (idx = first; idx <= last; idx += 1) {
01231             tst_val = DIFF(1);
01232             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01233             tst_val = RUNNING_DIFF(2);
01234             mask    = MASK(2);
01235             tst_val = RUNNING_DIFF(3);
01236             mask    = MASK(3);
01237             tst_val = RUNNING_DIFF(4);
01238             mask    = MASK(4);
01239             tst_val = RUNNING_DIFF(5);
01240             mask    = MASK(5);
01241             tst_val = RUNNING_DIFF(6);
01242             mask    = MASK(6);
01243             tst_val = RUNNING_DIFF(7);
01244             mask    = MASK(7);
01245             tst_val = RUNNING_DIFF(8);
01246             mask    = MASK(8);
01247             tst_val = RUNNING_DIFF(9);
01248             mask    = MASK(9);
01249             tst_val = RUNNING_DIFF(10);
01250             mask    = MASK(10);
01251             tst_val = RUNNING_DIFF(11);
01252             mask    = MASK(11);
01253             tst_val = RUNNING_DIFF(12);
01254             if (tst_val >= 0) {
01255                break;
01256             }
01257          }
01258          break;
01259 
01260       case 13:
01261          while (seg_len > 32) {
01262             for (idx = first + stride -1 ; idx <= last; idx += stride) {
01263                tst_val = DIFF(1);
01264                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01265                tst_val = RUNNING_DIFF(2);
01266                mask    = MASK(2);
01267                tst_val = RUNNING_DIFF(3);
01268                mask    = MASK(3);
01269                tst_val = RUNNING_DIFF(4);
01270                mask    = MASK(4);
01271                tst_val = RUNNING_DIFF(5);
01272                mask    = MASK(5);
01273                tst_val = RUNNING_DIFF(6);
01274                mask    = MASK(6);
01275                tst_val = RUNNING_DIFF(7);
01276                mask    = MASK(7);
01277                tst_val = RUNNING_DIFF(8);
01278                mask    = MASK(8);
01279                tst_val = RUNNING_DIFF(9);
01280                mask    = MASK(9);
01281                tst_val = RUNNING_DIFF(10);
01282                mask    = MASK(10);
01283                tst_val = RUNNING_DIFF(11);
01284                mask    = MASK(11);
01285                tst_val = RUNNING_DIFF(12);
01286                mask    = MASK(12);
01287                tst_val = RUNNING_DIFF(13);
01288                if (tst_val >= 0) {
01289                   break;
01290                }
01291             }  /* for */
01292             if (tst_val == 0) {
01293                 goto EXIT;
01294             }
01295             else if (tst_val > 0) {
01296                last = idx;
01297             }
01298             first   = idx - stride + 1;
01299             seg_len = last - first + 1;
01300             stride  = STRIDE_CALC(seg_len);
01301          }  /* end while seg_len > 32  */
01302 
01303          for (idx = first; idx <= last; idx += 1) {
01304             tst_val = DIFF(1);
01305             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01306             tst_val = RUNNING_DIFF(2);
01307             mask    = MASK(2);
01308             tst_val = RUNNING_DIFF(3);
01309             mask    = MASK(3);
01310             tst_val = RUNNING_DIFF(4);
01311             mask    = MASK(4);
01312             tst_val = RUNNING_DIFF(5);
01313             mask    = MASK(5);
01314             tst_val = RUNNING_DIFF(6);
01315             mask    = MASK(6);
01316             tst_val = RUNNING_DIFF(7);
01317             mask    = MASK(7);
01318             tst_val = RUNNING_DIFF(8);
01319             mask    = MASK(8);
01320             tst_val = RUNNING_DIFF(9);
01321             mask    = MASK(9);
01322             tst_val = RUNNING_DIFF(10);
01323             mask    = MASK(10);
01324             tst_val = RUNNING_DIFF(11);
01325             mask    = MASK(11);
01326             tst_val = RUNNING_DIFF(12);
01327             mask    = MASK(12);
01328             tst_val = RUNNING_DIFF(13);
01329             if (tst_val >= 0) {
01330                break;
01331             }
01332          }
01333          break;
01334 
01335       case 14:
01336          while (seg_len > 32) {
01337             for (idx = first + stride -1 ; idx <= last; idx += stride) {
01338                tst_val = DIFF(1);
01339                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01340                tst_val = RUNNING_DIFF(2);
01341                mask    = MASK(2);
01342                tst_val = RUNNING_DIFF(3);
01343                mask    = MASK(3);
01344                tst_val = RUNNING_DIFF(4);
01345                mask    = MASK(4);
01346                tst_val = RUNNING_DIFF(5);
01347                mask    = MASK(5);
01348                tst_val = RUNNING_DIFF(6);
01349                mask    = MASK(6);
01350                tst_val = RUNNING_DIFF(7);
01351                mask    = MASK(7);
01352                tst_val = RUNNING_DIFF(8);
01353                mask    = MASK(8);
01354                tst_val = RUNNING_DIFF(9);
01355                mask    = MASK(9);
01356                tst_val = RUNNING_DIFF(10);
01357                mask    = MASK(10);
01358                tst_val = RUNNING_DIFF(11);
01359                mask    = MASK(11);
01360                tst_val = RUNNING_DIFF(12);
01361                mask    = MASK(12);
01362                tst_val = RUNNING_DIFF(13);
01363                mask    = MASK(13);
01364                tst_val = RUNNING_DIFF(14);
01365                if (tst_val >= 0) {
01366                   break;
01367                }
01368             }  /* for */
01369             if (tst_val == 0) {
01370                 goto EXIT;
01371             }
01372             else if (tst_val > 0) {
01373                last = idx;
01374             }
01375             first   = idx - stride + 1;
01376             seg_len = last - first + 1;
01377             stride  = STRIDE_CALC(seg_len);
01378          }  /* end while seg_len > 32  */
01379 
01380          for (idx = first; idx <= last; idx += 1) {
01381             tst_val = DIFF(1);
01382             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01383             tst_val = RUNNING_DIFF(2);
01384             mask    = MASK(2);
01385             tst_val = RUNNING_DIFF(3);
01386             mask    = MASK(3);
01387             tst_val = RUNNING_DIFF(4);
01388             mask    = MASK(4);
01389             tst_val = RUNNING_DIFF(5);
01390             mask    = MASK(5);
01391             tst_val = RUNNING_DIFF(6);
01392             mask    = MASK(6);
01393             tst_val = RUNNING_DIFF(7);
01394             mask    = MASK(7);
01395             tst_val = RUNNING_DIFF(8);
01396             mask    = MASK(8);
01397             tst_val = RUNNING_DIFF(9);
01398             mask    = MASK(9);
01399             tst_val = RUNNING_DIFF(10);
01400             mask    = MASK(10);
01401             tst_val = RUNNING_DIFF(11);
01402             mask    = MASK(11);
01403             tst_val = RUNNING_DIFF(12);
01404             mask    = MASK(12);
01405             tst_val = RUNNING_DIFF(13);
01406             mask    = MASK(13);
01407             tst_val = RUNNING_DIFF(14);
01408             if (tst_val >= 0) {
01409                break;
01410             }
01411          }
01412          break;
01413 
01414       case 15:
01415          while (seg_len > 32) {
01416             for (idx = first + stride -1 ; idx <= last; idx += stride) {
01417                tst_val = DIFF(1);
01418                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01419                tst_val = RUNNING_DIFF(2);
01420                mask    = MASK(2);
01421                tst_val = RUNNING_DIFF(3);
01422                mask    = MASK(3);
01423                tst_val = RUNNING_DIFF(4);
01424                mask    = MASK(4);
01425                tst_val = RUNNING_DIFF(5);
01426                mask    = MASK(5);
01427                tst_val = RUNNING_DIFF(6);
01428                mask    = MASK(6);
01429                tst_val = RUNNING_DIFF(7);
01430                mask    = MASK(7);
01431                tst_val = RUNNING_DIFF(8);
01432                mask    = MASK(8);
01433                tst_val = RUNNING_DIFF(9);
01434                mask    = MASK(9);
01435                tst_val = RUNNING_DIFF(10);
01436                mask    = MASK(10);
01437                tst_val = RUNNING_DIFF(11);
01438                mask    = MASK(11);
01439                tst_val = RUNNING_DIFF(12);
01440                mask    = MASK(12);
01441                tst_val = RUNNING_DIFF(13);
01442                mask    = MASK(13);
01443                tst_val = RUNNING_DIFF(14);
01444                mask    = MASK(14);
01445                tst_val = RUNNING_DIFF(15);
01446                if (tst_val >= 0) {
01447                   break;
01448                }
01449             }  /* for */
01450             if (tst_val == 0) {
01451                 goto EXIT;
01452             }
01453             else if (tst_val > 0) {
01454                last = idx;
01455             }
01456             first   = idx - stride + 1;
01457             seg_len = last - first + 1;
01458             stride  = STRIDE_CALC(seg_len);
01459          }  /* end while seg_len > 32  */
01460 
01461          for (idx = first; idx <= last; idx += 1) {
01462             tst_val = DIFF(1);
01463             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01464             tst_val = RUNNING_DIFF(2);
01465             mask    = MASK(2);
01466             tst_val = RUNNING_DIFF(3);
01467             mask    = MASK(3);
01468             tst_val = RUNNING_DIFF(4);
01469             mask    = MASK(4);
01470             tst_val = RUNNING_DIFF(5);
01471             mask    = MASK(5);
01472             tst_val = RUNNING_DIFF(6);
01473             mask    = MASK(6);
01474             tst_val = RUNNING_DIFF(7);
01475             mask    = MASK(7);
01476             tst_val = RUNNING_DIFF(8);
01477             mask    = MASK(8);
01478             tst_val = RUNNING_DIFF(9);
01479             mask    = MASK(9);
01480             tst_val = RUNNING_DIFF(10);
01481             mask    = MASK(10);
01482             tst_val = RUNNING_DIFF(11);
01483             mask    = MASK(11);
01484             tst_val = RUNNING_DIFF(12);
01485             mask    = MASK(12);
01486             tst_val = RUNNING_DIFF(13);
01487             mask    = MASK(13);
01488             tst_val = RUNNING_DIFF(14);
01489             mask    = MASK(14);
01490             tst_val = RUNNING_DIFF(15);
01491             if (tst_val >= 0) {
01492                break;
01493             }
01494          }
01495          break;
01496 
01497       case 16:
01498          while (seg_len > 32) {
01499             for (idx = first + stride -1 ; idx <= last; idx += stride) {
01500                tst_val = DIFF(1);
01501                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01502                tst_val = RUNNING_DIFF(2);
01503                mask    = MASK(2);
01504                tst_val = RUNNING_DIFF(3);
01505                mask    = MASK(3);
01506                tst_val = RUNNING_DIFF(4);
01507                mask    = MASK(4);
01508                tst_val = RUNNING_DIFF(5);
01509                mask    = MASK(5);
01510                tst_val = RUNNING_DIFF(6);
01511                mask    = MASK(6);
01512                tst_val = RUNNING_DIFF(7);
01513                mask    = MASK(7);
01514                tst_val = RUNNING_DIFF(8);
01515                mask    = MASK(8);
01516                tst_val = RUNNING_DIFF(9);
01517                mask    = MASK(9);
01518                tst_val = RUNNING_DIFF(10);
01519                mask    = MASK(10);
01520                tst_val = RUNNING_DIFF(11);
01521                mask    = MASK(11);
01522                tst_val = RUNNING_DIFF(12);
01523                mask    = MASK(12);
01524                tst_val = RUNNING_DIFF(13);
01525                mask    = MASK(13);
01526                tst_val = RUNNING_DIFF(14);
01527                mask    = MASK(14);
01528                tst_val = RUNNING_DIFF(15);
01529                mask    = MASK(15);
01530                tst_val = RUNNING_DIFF(16);
01531                if (tst_val >= 0) {
01532                   break;
01533                }
01534             }  /* for */
01535             if (tst_val == 0) {
01536                 goto EXIT;
01537             }
01538             else if (tst_val > 0) {
01539                last = idx;
01540             }
01541             first   = idx - stride + 1;
01542             seg_len = last - first + 1;
01543             stride  = STRIDE_CALC(seg_len);
01544          }  /* end while seg_len > 32  */
01545 
01546          for (idx = first; idx <= last; idx += 1) {
01547             tst_val = DIFF(1);
01548             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01549             tst_val = RUNNING_DIFF(2);
01550             mask    = MASK(2);
01551             tst_val = RUNNING_DIFF(3);
01552             mask    = MASK(3);
01553             tst_val = RUNNING_DIFF(4);
01554             mask    = MASK(4);
01555             tst_val = RUNNING_DIFF(5);
01556             mask    = MASK(5);
01557             tst_val = RUNNING_DIFF(6);
01558             mask    = MASK(6);
01559             tst_val = RUNNING_DIFF(7);
01560             mask    = MASK(7);
01561             tst_val = RUNNING_DIFF(8);
01562             mask    = MASK(8);
01563             tst_val = RUNNING_DIFF(9);
01564             mask    = MASK(9);
01565             tst_val = RUNNING_DIFF(10);
01566             mask    = MASK(10);
01567             tst_val = RUNNING_DIFF(11);
01568             mask    = MASK(11);
01569             tst_val = RUNNING_DIFF(12);
01570             mask    = MASK(12);
01571             tst_val = RUNNING_DIFF(13);
01572             mask    = MASK(13);
01573             tst_val = RUNNING_DIFF(14);
01574             mask    = MASK(14);
01575             tst_val = RUNNING_DIFF(15);
01576             mask    = MASK(15);
01577             tst_val = RUNNING_DIFF(16);
01578             if (tst_val >= 0) {
01579                break;
01580             }
01581          }
01582          break;
01583 
01584 
01585       case 17:
01586          while (seg_len > 32) {
01587             for (idx = first + stride -1 ; idx <= last; idx += stride) {
01588                tst_val = DIFF(1);
01589                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01590                tst_val = RUNNING_DIFF(2);
01591                mask    = MASK(2);
01592                tst_val = RUNNING_DIFF(3);
01593                mask    = MASK(3);
01594                tst_val = RUNNING_DIFF(4);
01595                mask    = MASK(4);
01596                tst_val = RUNNING_DIFF(5);
01597                mask    = MASK(5);
01598                tst_val = RUNNING_DIFF(6);
01599                mask    = MASK(6);
01600                tst_val = RUNNING_DIFF(7);
01601                mask    = MASK(7);
01602                tst_val = RUNNING_DIFF(8);
01603                mask    = MASK(8);
01604                tst_val = RUNNING_DIFF(9);
01605                mask    = MASK(9);
01606                tst_val = RUNNING_DIFF(10);
01607                mask    = MASK(10);
01608                tst_val = RUNNING_DIFF(11);
01609                mask    = MASK(11);
01610                tst_val = RUNNING_DIFF(12);
01611                mask    = MASK(12);
01612                tst_val = RUNNING_DIFF(13);
01613                mask    = MASK(13);
01614                tst_val = RUNNING_DIFF(14);
01615                mask    = MASK(14);
01616                tst_val = RUNNING_DIFF(15);
01617                mask    = MASK(15);
01618                tst_val = RUNNING_DIFF(16);
01619                mask    = MASK(16);
01620                tst_val = RUNNING_DIFF(17);
01621                if (tst_val >= 0) {
01622                   break;
01623                }
01624             }  /* for */
01625             if (tst_val == 0) {
01626                 goto EXIT;
01627             }
01628             else if (tst_val > 0) {
01629                last = idx;
01630             }
01631             first   = idx - stride + 1;
01632             seg_len = last - first + 1;
01633             stride  = STRIDE_CALC(seg_len);
01634          }  /* end while seg_len > 32  */
01635 
01636          for (idx = first; idx <= last; idx += 1) {
01637             tst_val = DIFF(1);
01638             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01639             tst_val = RUNNING_DIFF(2);
01640             mask    = MASK(2);
01641             tst_val = RUNNING_DIFF(3);
01642             mask    = MASK(3);
01643             tst_val = RUNNING_DIFF(4);
01644             mask    = MASK(4);
01645             tst_val = RUNNING_DIFF(5);
01646             mask    = MASK(5);
01647             tst_val = RUNNING_DIFF(6);
01648             mask    = MASK(6);
01649             tst_val = RUNNING_DIFF(7);
01650             mask    = MASK(7);
01651             tst_val = RUNNING_DIFF(8);
01652             mask    = MASK(8);
01653             tst_val = RUNNING_DIFF(9);
01654             mask    = MASK(9);
01655             tst_val = RUNNING_DIFF(10);
01656             mask    = MASK(10);
01657             tst_val = RUNNING_DIFF(11);
01658             mask    = MASK(11);
01659             tst_val = RUNNING_DIFF(12);
01660             mask    = MASK(12);
01661             tst_val = RUNNING_DIFF(13);
01662             mask    = MASK(13);
01663             tst_val = RUNNING_DIFF(14);
01664             mask    = MASK(14);
01665             tst_val = RUNNING_DIFF(15);
01666             mask    = MASK(15);
01667             tst_val = RUNNING_DIFF(16);
01668             mask    = MASK(16);
01669             tst_val = RUNNING_DIFF(17);
01670             if (tst_val >= 0) {
01671                break;
01672             }
01673          }
01674          break;
01675 
01676 # ifdef _HOST32
01677 
01678       case 18:
01679          while (seg_len > 32) {
01680             for (idx = first + stride -1 ; idx <= last; idx += stride) {
01681                tst_val = DIFF(1);
01682                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01683                tst_val = RUNNING_DIFF(2);
01684                mask    = MASK(2);
01685                tst_val = RUNNING_DIFF(3);
01686                mask    = MASK(3);
01687                tst_val = RUNNING_DIFF(4);
01688                mask    = MASK(4);
01689                tst_val = RUNNING_DIFF(5);
01690                mask    = MASK(5);
01691                tst_val = RUNNING_DIFF(6);
01692                mask    = MASK(6);
01693                tst_val = RUNNING_DIFF(7);
01694                mask    = MASK(7);
01695                tst_val = RUNNING_DIFF(8);
01696                mask    = MASK(8);
01697                tst_val = RUNNING_DIFF(9);
01698                mask    = MASK(9);
01699                tst_val = RUNNING_DIFF(10);
01700                mask    = MASK(10);
01701                tst_val = RUNNING_DIFF(11);
01702                mask    = MASK(11);
01703                tst_val = RUNNING_DIFF(12);
01704                mask    = MASK(12);
01705                tst_val = RUNNING_DIFF(13);
01706                mask    = MASK(13);
01707                tst_val = RUNNING_DIFF(14);
01708                mask    = MASK(14);
01709                tst_val = RUNNING_DIFF(15);
01710                mask    = MASK(15);
01711                tst_val = RUNNING_DIFF(16);
01712                mask    = MASK(16);
01713                tst_val = RUNNING_DIFF(17);
01714                mask    = MASK(17);
01715                tst_val = RUNNING_DIFF(18);
01716                if (tst_val >= 0) {
01717                   break;
01718                }
01719             }  /* for */
01720             if (tst_val == 0) {
01721                 goto EXIT;
01722             }
01723             else if (tst_val > 0) {
01724                last = idx;
01725             }
01726             first   = idx - stride + 1;
01727             seg_len = last - first + 1;
01728             stride  = STRIDE_CALC(seg_len);
01729          }  /* end while seg_len > 32  */
01730 
01731          for (idx = first; idx <= last; idx += 1) {
01732             tst_val = DIFF(1);
01733             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01734             tst_val = RUNNING_DIFF(2);
01735             mask    = MASK(2);
01736             tst_val = RUNNING_DIFF(3);
01737             mask    = MASK(3);
01738             tst_val = RUNNING_DIFF(4);
01739             mask    = MASK(4);
01740             tst_val = RUNNING_DIFF(5);
01741             mask    = MASK(5);
01742             tst_val = RUNNING_DIFF(6);
01743             mask    = MASK(6);
01744             tst_val = RUNNING_DIFF(7);
01745             mask    = MASK(7);
01746             tst_val = RUNNING_DIFF(8);
01747             mask    = MASK(8);
01748             tst_val = RUNNING_DIFF(9);
01749             mask    = MASK(9);
01750             tst_val = RUNNING_DIFF(10);
01751             mask    = MASK(10);
01752             tst_val = RUNNING_DIFF(11);
01753             mask    = MASK(11);
01754             tst_val = RUNNING_DIFF(12);
01755             mask    = MASK(12);
01756             tst_val = RUNNING_DIFF(13);
01757             mask    = MASK(13);
01758             tst_val = RUNNING_DIFF(14);
01759             mask    = MASK(14);
01760             tst_val = RUNNING_DIFF(15);
01761             mask    = MASK(15);
01762             tst_val = RUNNING_DIFF(16);
01763             mask    = MASK(16);
01764             tst_val = RUNNING_DIFF(17);
01765             mask    = MASK(17);
01766             tst_val = RUNNING_DIFF(18);
01767             if (tst_val >= 0) {
01768                break;
01769             }
01770          }
01771          break;
01772 
01773       case 19:
01774          while (seg_len > 32) {
01775             for (idx = first + stride -1 ; idx <= last; idx += stride) {
01776                tst_val = DIFF(1);
01777                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01778                tst_val = RUNNING_DIFF(2);
01779                mask    = MASK(2);
01780                tst_val = RUNNING_DIFF(3);
01781                mask    = MASK(3);
01782                tst_val = RUNNING_DIFF(4);
01783                mask    = MASK(4);
01784                tst_val = RUNNING_DIFF(5);
01785                mask    = MASK(5);
01786                tst_val = RUNNING_DIFF(6);
01787                mask    = MASK(6);
01788                tst_val = RUNNING_DIFF(7);
01789                mask    = MASK(7);
01790                tst_val = RUNNING_DIFF(8);
01791                mask    = MASK(8);
01792                tst_val = RUNNING_DIFF(9);
01793                mask    = MASK(9);
01794                tst_val = RUNNING_DIFF(10);
01795                mask    = MASK(10);
01796                tst_val = RUNNING_DIFF(11);
01797                mask    = MASK(11);
01798                tst_val = RUNNING_DIFF(12);
01799                mask    = MASK(12);
01800                tst_val = RUNNING_DIFF(13);
01801                mask    = MASK(13);
01802                tst_val = RUNNING_DIFF(14);
01803                mask    = MASK(14);
01804                tst_val = RUNNING_DIFF(15);
01805                mask    = MASK(15);
01806                tst_val = RUNNING_DIFF(16);
01807                mask    = MASK(16);
01808                tst_val = RUNNING_DIFF(17);
01809                mask    = MASK(17);
01810                tst_val = RUNNING_DIFF(18);
01811                mask    = MASK(18);
01812                tst_val = RUNNING_DIFF(19);
01813                if (tst_val >= 0) {
01814                   break;
01815                }
01816             }  /* for */
01817             if (tst_val == 0) {
01818                 goto EXIT;
01819             }
01820             else if (tst_val > 0) {
01821                last = idx;
01822             }
01823             first   = idx - stride + 1;
01824             seg_len = last - first + 1;
01825             stride  = STRIDE_CALC(seg_len);
01826          }  /* end while seg_len > 32  */
01827 
01828          for (idx = first; idx <= last; idx += 1) {
01829             tst_val = DIFF(1);
01830             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01831             tst_val = RUNNING_DIFF(2);
01832             mask    = MASK(2);
01833             tst_val = RUNNING_DIFF(3);
01834             mask    = MASK(3);
01835             tst_val = RUNNING_DIFF(4);
01836             mask    = MASK(4);
01837             tst_val = RUNNING_DIFF(5);
01838             mask    = MASK(5);
01839             tst_val = RUNNING_DIFF(6);
01840             mask    = MASK(6);
01841             tst_val = RUNNING_DIFF(7);
01842             mask    = MASK(7);
01843             tst_val = RUNNING_DIFF(8);
01844             mask    = MASK(8);
01845             tst_val = RUNNING_DIFF(9);
01846             mask    = MASK(9);
01847             tst_val = RUNNING_DIFF(10);
01848             mask    = MASK(10);
01849             tst_val = RUNNING_DIFF(11);
01850             mask    = MASK(11);
01851             tst_val = RUNNING_DIFF(12);
01852             mask    = MASK(12);
01853             tst_val = RUNNING_DIFF(13);
01854             mask    = MASK(13);
01855             tst_val = RUNNING_DIFF(14);
01856             mask    = MASK(14);
01857             tst_val = RUNNING_DIFF(15);
01858             mask    = MASK(15);
01859             tst_val = RUNNING_DIFF(16);
01860             mask    = MASK(16);
01861             tst_val = RUNNING_DIFF(17);
01862             mask    = MASK(17);
01863             tst_val = RUNNING_DIFF(18);
01864             mask    = MASK(18);
01865             tst_val = RUNNING_DIFF(19);
01866             if (tst_val >= 0) {
01867                break;
01868             }
01869          }
01870          break;
01871 
01872       case 20:
01873          while (seg_len > 32) {
01874             for (idx = first + stride -1 ; idx <= last; idx += stride) {
01875                tst_val = DIFF(1);
01876                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01877                tst_val = RUNNING_DIFF(2);
01878                mask    = MASK(2);
01879                tst_val = RUNNING_DIFF(3);
01880                mask    = MASK(3);
01881                tst_val = RUNNING_DIFF(4);
01882                mask    = MASK(4);
01883                tst_val = RUNNING_DIFF(5);
01884                mask    = MASK(5);
01885                tst_val = RUNNING_DIFF(6);
01886                mask    = MASK(6);
01887                tst_val = RUNNING_DIFF(7);
01888                mask    = MASK(7);
01889                tst_val = RUNNING_DIFF(8);
01890                mask    = MASK(8);
01891                tst_val = RUNNING_DIFF(9);
01892                mask    = MASK(9);
01893                tst_val = RUNNING_DIFF(10);
01894                mask    = MASK(10);
01895                tst_val = RUNNING_DIFF(11);
01896                mask    = MASK(11);
01897                tst_val = RUNNING_DIFF(12);
01898                mask    = MASK(12);
01899                tst_val = RUNNING_DIFF(13);
01900                mask    = MASK(13);
01901                tst_val = RUNNING_DIFF(14);
01902                mask    = MASK(14);
01903                tst_val = RUNNING_DIFF(15);
01904                mask    = MASK(15);
01905                tst_val = RUNNING_DIFF(16);
01906                mask    = MASK(16);
01907                tst_val = RUNNING_DIFF(17);
01908                mask    = MASK(17);
01909                tst_val = RUNNING_DIFF(18);
01910                mask    = MASK(18);
01911                tst_val = RUNNING_DIFF(19);
01912                mask    = MASK(19);
01913                tst_val = RUNNING_DIFF(20);
01914                if (tst_val >= 0) {
01915                   break;
01916                }
01917             }  /* for */
01918             if (tst_val == 0) {
01919                 goto EXIT;
01920             }
01921             else if (tst_val > 0) {
01922                last = idx;
01923             }
01924             first   = idx - stride + 1;
01925             seg_len = last - first + 1;
01926             stride  = STRIDE_CALC(seg_len);
01927          }  /* end while seg_len > 32  */
01928 
01929          for (idx = first; idx <= last; idx += 1) {
01930             tst_val = DIFF(1);
01931             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01932             tst_val = RUNNING_DIFF(2);
01933             mask    = MASK(2);
01934             tst_val = RUNNING_DIFF(3);
01935             mask    = MASK(3);
01936             tst_val = RUNNING_DIFF(4);
01937             mask    = MASK(4);
01938             tst_val = RUNNING_DIFF(5);
01939             mask    = MASK(5);
01940             tst_val = RUNNING_DIFF(6);
01941             mask    = MASK(6);
01942             tst_val = RUNNING_DIFF(7);
01943             mask    = MASK(7);
01944             tst_val = RUNNING_DIFF(8);
01945             mask    = MASK(8);
01946             tst_val = RUNNING_DIFF(9);
01947             mask    = MASK(9);
01948             tst_val = RUNNING_DIFF(10);
01949             mask    = MASK(10);
01950             tst_val = RUNNING_DIFF(11);
01951             mask    = MASK(11);
01952             tst_val = RUNNING_DIFF(12);
01953             mask    = MASK(12);
01954             tst_val = RUNNING_DIFF(13);
01955             mask    = MASK(13);
01956             tst_val = RUNNING_DIFF(14);
01957             mask    = MASK(14);
01958             tst_val = RUNNING_DIFF(15);
01959             mask    = MASK(15);
01960             tst_val = RUNNING_DIFF(16);
01961             mask    = MASK(16);
01962             tst_val = RUNNING_DIFF(17);
01963             mask    = MASK(17);
01964             tst_val = RUNNING_DIFF(18);
01965             mask    = MASK(18);
01966             tst_val = RUNNING_DIFF(19);
01967             mask    = MASK(19);
01968             tst_val = RUNNING_DIFF(20);
01969             if (tst_val >= 0) {
01970                break;
01971             }
01972          }
01973          break;
01974 
01975       case 21:
01976          while (seg_len > 32) {
01977             for (idx = first + stride -1 ; idx <= last; idx += stride) {
01978                tst_val = DIFF(1);
01979                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
01980                tst_val = RUNNING_DIFF(2);
01981                mask    = MASK(2);
01982                tst_val = RUNNING_DIFF(3);
01983                mask    = MASK(3);
01984                tst_val = RUNNING_DIFF(4);
01985                mask    = MASK(4);
01986                tst_val = RUNNING_DIFF(5);
01987                mask    = MASK(5);
01988                tst_val = RUNNING_DIFF(6);
01989                mask    = MASK(6);
01990                tst_val = RUNNING_DIFF(7);
01991                mask    = MASK(7);
01992                tst_val = RUNNING_DIFF(8);
01993                mask    = MASK(8);
01994                tst_val = RUNNING_DIFF(9);
01995                mask    = MASK(9);
01996                tst_val = RUNNING_DIFF(10);
01997                mask    = MASK(10);
01998                tst_val = RUNNING_DIFF(11);
01999                mask    = MASK(11);
02000                tst_val = RUNNING_DIFF(12);
02001                mask    = MASK(12);
02002                tst_val = RUNNING_DIFF(13);
02003                mask    = MASK(13);
02004                tst_val = RUNNING_DIFF(14);
02005                mask    = MASK(14);
02006                tst_val = RUNNING_DIFF(15);
02007                mask    = MASK(15);
02008                tst_val = RUNNING_DIFF(16);
02009                mask    = MASK(16);
02010                tst_val = RUNNING_DIFF(17);
02011                mask    = MASK(17);
02012                tst_val = RUNNING_DIFF(18);
02013                mask    = MASK(18);
02014                tst_val = RUNNING_DIFF(19);
02015                mask    = MASK(19);
02016                tst_val = RUNNING_DIFF(20);
02017                mask    = MASK(20);
02018                tst_val = RUNNING_DIFF(21);
02019                if (tst_val >= 0) {
02020                   break;
02021                }
02022             }  /* for */
02023             if (tst_val == 0) {
02024                 goto EXIT;
02025             }
02026             else if (tst_val > 0) {
02027                last = idx;
02028             }
02029             first   = idx - stride + 1;
02030             seg_len = last - first + 1;
02031             stride  = STRIDE_CALC(seg_len);
02032          }  /* end while seg_len > 32  */
02033 
02034          for (idx = first; idx <= last; idx += 1) {
02035             tst_val = DIFF(1);
02036             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02037             tst_val = RUNNING_DIFF(2);
02038             mask    = MASK(2);
02039             tst_val = RUNNING_DIFF(3);
02040             mask    = MASK(3);
02041             tst_val = RUNNING_DIFF(4);
02042             mask    = MASK(4);
02043             tst_val = RUNNING_DIFF(5);
02044             mask    = MASK(5);
02045             tst_val = RUNNING_DIFF(6);
02046             mask    = MASK(6);
02047             tst_val = RUNNING_DIFF(7);
02048             mask    = MASK(7);
02049             tst_val = RUNNING_DIFF(8);
02050             mask    = MASK(8);
02051             tst_val = RUNNING_DIFF(9);
02052             mask    = MASK(9);
02053             tst_val = RUNNING_DIFF(10);
02054             mask    = MASK(10);
02055             tst_val = RUNNING_DIFF(11);
02056             mask    = MASK(11);
02057             tst_val = RUNNING_DIFF(12);
02058             mask    = MASK(12);
02059             tst_val = RUNNING_DIFF(13);
02060             mask    = MASK(13);
02061             tst_val = RUNNING_DIFF(14);
02062             mask    = MASK(14);
02063             tst_val = RUNNING_DIFF(15);
02064             mask    = MASK(15);
02065             tst_val = RUNNING_DIFF(16);
02066             mask    = MASK(16);
02067             tst_val = RUNNING_DIFF(17);
02068             mask    = MASK(17);
02069             tst_val = RUNNING_DIFF(18);
02070             mask    = MASK(18);
02071             tst_val = RUNNING_DIFF(19);
02072             mask    = MASK(19);
02073             tst_val = RUNNING_DIFF(20);
02074             mask    = MASK(20);
02075             tst_val = RUNNING_DIFF(21);
02076             if (tst_val >= 0) {
02077                break;
02078             }
02079          }
02080          break;
02081 
02082       case 22:
02083          while (seg_len > 32) {
02084             for (idx = first + stride -1 ; idx <= last; idx += stride) {
02085                tst_val = DIFF(1);
02086                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02087                tst_val = RUNNING_DIFF(2);
02088                mask    = MASK(2);
02089                tst_val = RUNNING_DIFF(3);
02090                mask    = MASK(3);
02091                tst_val = RUNNING_DIFF(4);
02092                mask    = MASK(4);
02093                tst_val = RUNNING_DIFF(5);
02094                mask    = MASK(5);
02095                tst_val = RUNNING_DIFF(6);
02096                mask    = MASK(6);
02097                tst_val = RUNNING_DIFF(7);
02098                mask    = MASK(7);
02099                tst_val = RUNNING_DIFF(8);
02100                mask    = MASK(8);
02101                tst_val = RUNNING_DIFF(9);
02102                mask    = MASK(9);
02103                tst_val = RUNNING_DIFF(10);
02104                mask    = MASK(10);
02105                tst_val = RUNNING_DIFF(11);
02106                mask    = MASK(11);
02107                tst_val = RUNNING_DIFF(12);
02108                mask    = MASK(12);
02109                tst_val = RUNNING_DIFF(13);
02110                mask    = MASK(13);
02111                tst_val = RUNNING_DIFF(14);
02112                mask    = MASK(14);
02113                tst_val = RUNNING_DIFF(15);
02114                mask    = MASK(15);
02115                tst_val = RUNNING_DIFF(16);
02116                mask    = MASK(16);
02117                tst_val = RUNNING_DIFF(17);
02118                mask    = MASK(17);
02119                tst_val = RUNNING_DIFF(18);
02120                mask    = MASK(18);
02121                tst_val = RUNNING_DIFF(19);
02122                mask    = MASK(19);
02123                tst_val = RUNNING_DIFF(20);
02124                mask    = MASK(20);
02125                tst_val = RUNNING_DIFF(21);
02126                mask    = MASK(21);
02127                tst_val = RUNNING_DIFF(22);
02128                if (tst_val >= 0) {
02129                   break;
02130                }
02131             }  /* for */
02132             if (tst_val == 0) {
02133                 goto EXIT;
02134             }
02135             else if (tst_val > 0) {
02136                last = idx;
02137             }
02138             first   = idx - stride + 1;
02139             seg_len = last - first + 1;
02140             stride  = STRIDE_CALC(seg_len);
02141          }  /* end while seg_len > 32  */
02142 
02143          for (idx = first; idx <= last; idx += 1) {
02144             tst_val = DIFF(1);
02145             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02146             tst_val = RUNNING_DIFF(2);
02147             mask    = MASK(2);
02148             tst_val = RUNNING_DIFF(3);
02149             mask    = MASK(3);
02150             tst_val = RUNNING_DIFF(4);
02151             mask    = MASK(4);
02152             tst_val = RUNNING_DIFF(5);
02153             mask    = MASK(5);
02154             tst_val = RUNNING_DIFF(6);
02155             mask    = MASK(6);
02156             tst_val = RUNNING_DIFF(7);
02157             mask    = MASK(7);
02158             tst_val = RUNNING_DIFF(8);
02159             mask    = MASK(8);
02160             tst_val = RUNNING_DIFF(9);
02161             mask    = MASK(9);
02162             tst_val = RUNNING_DIFF(10);
02163             mask    = MASK(10);
02164             tst_val = RUNNING_DIFF(11);
02165             mask    = MASK(11);
02166             tst_val = RUNNING_DIFF(12);
02167             mask    = MASK(12);
02168             tst_val = RUNNING_DIFF(13);
02169             mask    = MASK(13);
02170             tst_val = RUNNING_DIFF(14);
02171             mask    = MASK(14);
02172             tst_val = RUNNING_DIFF(15);
02173             mask    = MASK(15);
02174             tst_val = RUNNING_DIFF(16);
02175             mask    = MASK(16);
02176             tst_val = RUNNING_DIFF(17);
02177             mask    = MASK(17);
02178             tst_val = RUNNING_DIFF(18);
02179             mask    = MASK(18);
02180             tst_val = RUNNING_DIFF(19);
02181             mask    = MASK(19);
02182             tst_val = RUNNING_DIFF(20);
02183             mask    = MASK(20);
02184             tst_val = RUNNING_DIFF(21);
02185             mask    = MASK(21);
02186             tst_val = RUNNING_DIFF(22);
02187             if (tst_val >= 0) {
02188                break;
02189             }
02190          }
02191          break;
02192 
02193 /* SGI's gcc -3.0 seems to have a bug? including the following cases cause
02194  * the switch to fall down to default no matter what the value of seg_len
02195  * is.
02196  */
02197 /* #if 0 */ /* must if zero this and below! why? */
02198       case 23:
02199          while (seg_len > 32) {
02200             for (idx = first + stride -1 ; idx <= last; idx += stride) {
02201                tst_val = DIFF(1);
02202                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02203                tst_val = RUNNING_DIFF(2);
02204                mask    = MASK(2);
02205                tst_val = RUNNING_DIFF(3);
02206                mask    = MASK(3);
02207                tst_val = RUNNING_DIFF(4);
02208                mask    = MASK(4);
02209                tst_val = RUNNING_DIFF(5);
02210                mask    = MASK(5);
02211                tst_val = RUNNING_DIFF(6);
02212                mask    = MASK(6);
02213                tst_val = RUNNING_DIFF(7);
02214                mask    = MASK(7);
02215                tst_val = RUNNING_DIFF(8);
02216                mask    = MASK(8);
02217                tst_val = RUNNING_DIFF(9);
02218                mask    = MASK(9);
02219                tst_val = RUNNING_DIFF(10);
02220                mask    = MASK(10);
02221                tst_val = RUNNING_DIFF(11);
02222                mask    = MASK(11);
02223                tst_val = RUNNING_DIFF(12);
02224                mask    = MASK(12);
02225                tst_val = RUNNING_DIFF(13);
02226                mask    = MASK(13);
02227                tst_val = RUNNING_DIFF(14);
02228                mask    = MASK(14);
02229                tst_val = RUNNING_DIFF(15);
02230                mask    = MASK(15);
02231                tst_val = RUNNING_DIFF(16);
02232                mask    = MASK(16);
02233                tst_val = RUNNING_DIFF(17);
02234                mask    = MASK(17);
02235                tst_val = RUNNING_DIFF(18);
02236                mask    = MASK(18);
02237                tst_val = RUNNING_DIFF(19);
02238                mask    = MASK(19);
02239                tst_val = RUNNING_DIFF(20);
02240                mask    = MASK(20);
02241                tst_val = RUNNING_DIFF(21);
02242                mask    = MASK(21);
02243                tst_val = RUNNING_DIFF(22);
02244                mask    = MASK(22);
02245                tst_val = RUNNING_DIFF(23);
02246                if (tst_val >= 0) {
02247                   break;
02248                }
02249             }  /* for */
02250             if (tst_val == 0) {
02251                 goto EXIT;
02252             }
02253             else if (tst_val > 0) {
02254                last = idx;
02255             }
02256             first   = idx - stride + 1;
02257             seg_len = last - first + 1;
02258             stride  = STRIDE_CALC(seg_len);
02259          }  /* end while seg_len > 32  */
02260 
02261          for (idx = first; idx <= last; idx += 1) {
02262             tst_val = DIFF(1);
02263             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02264             tst_val = RUNNING_DIFF(2);
02265             mask    = MASK(2);
02266             tst_val = RUNNING_DIFF(3);
02267             mask    = MASK(3);
02268             tst_val = RUNNING_DIFF(4);
02269             mask    = MASK(4);
02270             tst_val = RUNNING_DIFF(5);
02271             mask    = MASK(5);
02272             tst_val = RUNNING_DIFF(6);
02273             mask    = MASK(6);
02274             tst_val = RUNNING_DIFF(7);
02275             mask    = MASK(7);
02276             tst_val = RUNNING_DIFF(8);
02277             mask    = MASK(8);
02278             tst_val = RUNNING_DIFF(9);
02279             mask    = MASK(9);
02280             tst_val = RUNNING_DIFF(10);
02281             mask    = MASK(10);
02282             tst_val = RUNNING_DIFF(11);
02283             mask    = MASK(11);
02284             tst_val = RUNNING_DIFF(12);
02285             mask    = MASK(12);
02286             tst_val = RUNNING_DIFF(13);
02287             mask    = MASK(13);
02288             tst_val = RUNNING_DIFF(14);
02289             mask    = MASK(14);
02290             tst_val = RUNNING_DIFF(15);
02291             mask    = MASK(15);
02292             tst_val = RUNNING_DIFF(16);
02293             mask    = MASK(16);
02294             tst_val = RUNNING_DIFF(17);
02295             mask    = MASK(17);
02296             tst_val = RUNNING_DIFF(18);
02297             mask    = MASK(18);
02298             tst_val = RUNNING_DIFF(19);
02299             mask    = MASK(19);
02300             tst_val = RUNNING_DIFF(20);
02301             mask    = MASK(20);
02302             tst_val = RUNNING_DIFF(21);
02303             mask    = MASK(21);
02304             tst_val = RUNNING_DIFF(22);
02305             mask    = MASK(22);
02306             tst_val = RUNNING_DIFF(23);
02307             if (tst_val >= 0) {
02308                break;
02309             }
02310          }
02311          break;
02312 
02313       case 24:
02314          while (seg_len > 32) {
02315             for (idx = first + stride -1 ; idx <= last; idx += stride) {
02316                tst_val = DIFF(1);
02317                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02318                tst_val = RUNNING_DIFF(2);
02319                mask    = MASK(2);
02320                tst_val = RUNNING_DIFF(3);
02321                mask    = MASK(3);
02322                tst_val = RUNNING_DIFF(4);
02323                mask    = MASK(4);
02324                tst_val = RUNNING_DIFF(5);
02325                mask    = MASK(5);
02326                tst_val = RUNNING_DIFF(6);
02327                mask    = MASK(6);
02328                tst_val = RUNNING_DIFF(7);
02329                mask    = MASK(7);
02330                tst_val = RUNNING_DIFF(8);
02331                mask    = MASK(8);
02332                tst_val = RUNNING_DIFF(9);
02333                mask    = MASK(9);
02334                tst_val = RUNNING_DIFF(10);
02335                mask    = MASK(10);
02336                tst_val = RUNNING_DIFF(11);
02337                mask    = MASK(11);
02338                tst_val = RUNNING_DIFF(12);
02339                mask    = MASK(12);
02340                tst_val = RUNNING_DIFF(13);
02341                mask    = MASK(13);
02342                tst_val = RUNNING_DIFF(14);
02343                mask    = MASK(14);
02344                tst_val = RUNNING_DIFF(15);
02345                mask    = MASK(15);
02346                tst_val = RUNNING_DIFF(16);
02347                mask    = MASK(16);
02348                tst_val = RUNNING_DIFF(17);
02349                mask    = MASK(17);
02350                tst_val = RUNNING_DIFF(18);
02351                mask    = MASK(18);
02352                tst_val = RUNNING_DIFF(19);
02353                mask    = MASK(19);
02354                tst_val = RUNNING_DIFF(20);
02355                mask    = MASK(20);
02356                tst_val = RUNNING_DIFF(21);
02357                mask    = MASK(21);
02358                tst_val = RUNNING_DIFF(22);
02359                mask    = MASK(22);
02360                tst_val = RUNNING_DIFF(23);
02361                mask    = MASK(23);
02362                tst_val = RUNNING_DIFF(24);
02363                if (tst_val >= 0) {
02364                   break;
02365                }
02366             }  /* for */
02367             if (tst_val == 0) {
02368                 goto EXIT;
02369             }
02370             else if (tst_val > 0) {
02371                last = idx;
02372             }
02373             first   = idx - stride + 1;
02374             seg_len = last - first + 1;
02375             stride  = STRIDE_CALC(seg_len);
02376          }  /* end while seg_len > 32  */
02377 
02378          for (idx = first; idx <= last; idx += 1) {
02379             tst_val = DIFF(1);
02380             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02381             tst_val = RUNNING_DIFF(2);
02382             mask    = MASK(2);
02383             tst_val = RUNNING_DIFF(3);
02384             mask    = MASK(3);
02385             tst_val = RUNNING_DIFF(4);
02386             mask    = MASK(4);
02387             tst_val = RUNNING_DIFF(5);
02388             mask    = MASK(5);
02389             tst_val = RUNNING_DIFF(6);
02390             mask    = MASK(6);
02391             tst_val = RUNNING_DIFF(7);
02392             mask    = MASK(7);
02393             tst_val = RUNNING_DIFF(8);
02394             mask    = MASK(8);
02395             tst_val = RUNNING_DIFF(9);
02396             mask    = MASK(9);
02397             tst_val = RUNNING_DIFF(10);
02398             mask    = MASK(10);
02399             tst_val = RUNNING_DIFF(11);
02400             mask    = MASK(11);
02401             tst_val = RUNNING_DIFF(12);
02402             mask    = MASK(12);
02403             tst_val = RUNNING_DIFF(13);
02404             mask    = MASK(13);
02405             tst_val = RUNNING_DIFF(14);
02406             mask    = MASK(14);
02407             tst_val = RUNNING_DIFF(15);
02408             mask    = MASK(15);
02409             tst_val = RUNNING_DIFF(16);
02410             mask    = MASK(16);
02411             tst_val = RUNNING_DIFF(17);
02412             mask    = MASK(17);
02413             tst_val = RUNNING_DIFF(18);
02414             mask    = MASK(18);
02415             tst_val = RUNNING_DIFF(19);
02416             mask    = MASK(19);
02417             tst_val = RUNNING_DIFF(20);
02418             mask    = MASK(20);
02419             tst_val = RUNNING_DIFF(21);
02420             mask    = MASK(21);
02421             tst_val = RUNNING_DIFF(22);
02422             mask    = MASK(22);
02423             tst_val = RUNNING_DIFF(23);
02424             mask    = MASK(23);
02425             tst_val = RUNNING_DIFF(24);
02426             if (tst_val >= 0) {
02427                break;
02428             }
02429          }
02430          break;
02431 
02432       case 25:
02433          while (seg_len > 32) {
02434             for (idx = first + stride -1 ; idx <= last; idx += stride) {
02435                tst_val = DIFF(1);
02436                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02437                tst_val = RUNNING_DIFF(2);
02438                mask    = MASK(2);
02439                tst_val = RUNNING_DIFF(3);
02440                mask    = MASK(3);
02441                tst_val = RUNNING_DIFF(4);
02442                mask    = MASK(4);
02443                tst_val = RUNNING_DIFF(5);
02444                mask    = MASK(5);
02445                tst_val = RUNNING_DIFF(6);
02446                mask    = MASK(6);
02447                tst_val = RUNNING_DIFF(7);
02448                mask    = MASK(7);
02449                tst_val = RUNNING_DIFF(8);
02450                mask    = MASK(8);
02451                tst_val = RUNNING_DIFF(9);
02452                mask    = MASK(9);
02453                tst_val = RUNNING_DIFF(10);
02454                mask    = MASK(10);
02455                tst_val = RUNNING_DIFF(11);
02456                mask    = MASK(11);
02457                tst_val = RUNNING_DIFF(12);
02458                mask    = MASK(12);
02459                tst_val = RUNNING_DIFF(13);
02460                mask    = MASK(13);
02461                tst_val = RUNNING_DIFF(14);
02462                mask    = MASK(14);
02463                tst_val = RUNNING_DIFF(15);
02464                mask    = MASK(15);
02465                tst_val = RUNNING_DIFF(16);
02466                mask    = MASK(16);
02467                tst_val = RUNNING_DIFF(17);
02468                mask    = MASK(17);
02469                tst_val = RUNNING_DIFF(18);
02470                mask    = MASK(18);
02471                tst_val = RUNNING_DIFF(19);
02472                mask    = MASK(19);
02473                tst_val = RUNNING_DIFF(20);
02474                mask    = MASK(20);
02475                tst_val = RUNNING_DIFF(21);
02476                mask    = MASK(21);
02477                tst_val = RUNNING_DIFF(22);
02478                mask    = MASK(22);
02479                tst_val = RUNNING_DIFF(23);
02480                mask    = MASK(23);
02481                tst_val = RUNNING_DIFF(24);
02482                mask    = MASK(24);
02483                tst_val = RUNNING_DIFF(25);
02484                if (tst_val >= 0) {
02485                   break;
02486                }
02487             }  /* for */
02488             if (tst_val == 0) {
02489                 goto EXIT;
02490             }
02491             else if (tst_val > 0) {
02492                last = idx;
02493             }
02494             first   = idx - stride + 1;
02495             seg_len = last - first + 1;
02496             stride  = STRIDE_CALC(seg_len);
02497          }  /* end while seg_len > 32  */
02498 
02499          for (idx = first; idx <= last; idx += 1) {
02500             tst_val = DIFF(1);
02501             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02502             tst_val = RUNNING_DIFF(2);
02503             mask    = MASK(2);
02504             tst_val = RUNNING_DIFF(3);
02505             mask    = MASK(3);
02506             tst_val = RUNNING_DIFF(4);
02507             mask    = MASK(4);
02508             tst_val = RUNNING_DIFF(5);
02509             mask    = MASK(5);
02510             tst_val = RUNNING_DIFF(6);
02511             mask    = MASK(6);
02512             tst_val = RUNNING_DIFF(7);
02513             mask    = MASK(7);
02514             tst_val = RUNNING_DIFF(8);
02515             mask    = MASK(8);
02516             tst_val = RUNNING_DIFF(9);
02517             mask    = MASK(9);
02518             tst_val = RUNNING_DIFF(10);
02519             mask    = MASK(10);
02520             tst_val = RUNNING_DIFF(11);
02521             mask    = MASK(11);
02522             tst_val = RUNNING_DIFF(12);
02523             mask    = MASK(12);
02524             tst_val = RUNNING_DIFF(13);
02525             mask    = MASK(13);
02526             tst_val = RUNNING_DIFF(14);
02527             mask    = MASK(14);
02528             tst_val = RUNNING_DIFF(15);
02529             mask    = MASK(15);
02530             tst_val = RUNNING_DIFF(16);
02531             mask    = MASK(16);
02532             tst_val = RUNNING_DIFF(17);
02533             mask    = MASK(17);
02534             tst_val = RUNNING_DIFF(18);
02535             mask    = MASK(18);
02536             tst_val = RUNNING_DIFF(19);
02537             mask    = MASK(19);
02538             tst_val = RUNNING_DIFF(20);
02539             mask    = MASK(20);
02540             tst_val = RUNNING_DIFF(21);
02541             mask    = MASK(21);
02542             tst_val = RUNNING_DIFF(22);
02543             mask    = MASK(22);
02544             tst_val = RUNNING_DIFF(23);
02545             mask    = MASK(23);
02546             tst_val = RUNNING_DIFF(24);
02547             mask    = MASK(24);
02548             tst_val = RUNNING_DIFF(25);
02549             if (tst_val >= 0) {
02550                break;
02551             }
02552          }
02553          break;
02554 
02555       case 26:
02556          while (seg_len > 32) {
02557             for (idx = first + stride -1 ; idx <= last; idx += stride) {
02558                tst_val = DIFF(1);
02559                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02560                tst_val = RUNNING_DIFF(2);
02561                mask    = MASK(2);
02562                tst_val = RUNNING_DIFF(3);
02563                mask    = MASK(3);
02564                tst_val = RUNNING_DIFF(4);
02565                mask    = MASK(4);
02566                tst_val = RUNNING_DIFF(5);
02567                mask    = MASK(5);
02568                tst_val = RUNNING_DIFF(6);
02569                mask    = MASK(6);
02570                tst_val = RUNNING_DIFF(7);
02571                mask    = MASK(7);
02572                tst_val = RUNNING_DIFF(8);
02573                mask    = MASK(8);
02574                tst_val = RUNNING_DIFF(9);
02575                mask    = MASK(9);
02576                tst_val = RUNNING_DIFF(10);
02577                mask    = MASK(10);
02578                tst_val = RUNNING_DIFF(11);
02579                mask    = MASK(11);
02580                tst_val = RUNNING_DIFF(12);
02581                mask    = MASK(12);
02582                tst_val = RUNNING_DIFF(13);
02583                mask    = MASK(13);
02584                tst_val = RUNNING_DIFF(14);
02585                mask    = MASK(14);
02586                tst_val = RUNNING_DIFF(15);
02587                mask    = MASK(15);
02588                tst_val = RUNNING_DIFF(16);
02589                mask    = MASK(16);
02590                tst_val = RUNNING_DIFF(17);
02591                mask    = MASK(17);
02592                tst_val = RUNNING_DIFF(18);
02593                mask    = MASK(18);
02594                tst_val = RUNNING_DIFF(19);
02595                mask    = MASK(19);
02596                tst_val = RUNNING_DIFF(20);
02597                mask    = MASK(20);
02598                tst_val = RUNNING_DIFF(21);
02599                mask    = MASK(21);
02600                tst_val = RUNNING_DIFF(22);
02601                mask    = MASK(22);
02602                tst_val = RUNNING_DIFF(23);
02603                mask    = MASK(23);
02604                tst_val = RUNNING_DIFF(24);
02605                mask    = MASK(24);
02606                tst_val = RUNNING_DIFF(25);
02607                mask    = MASK(25);
02608                tst_val = RUNNING_DIFF(26);
02609                if (tst_val >= 0) {
02610                   break;
02611                }
02612             }  /* for */
02613             if (tst_val == 0) {
02614                 goto EXIT;
02615             }
02616             else if (tst_val > 0) {
02617                last = idx;
02618             }
02619             first   = idx - stride + 1;
02620             seg_len = last - first + 1;
02621             stride  = STRIDE_CALC(seg_len);
02622          }  /* end while seg_len > 32  */
02623 
02624          for (idx = first; idx <= last; idx += 1) {
02625             tst_val = DIFF(1);
02626             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02627             tst_val = RUNNING_DIFF(2);
02628             mask    = MASK(2);
02629             tst_val = RUNNING_DIFF(3);
02630             mask    = MASK(3);
02631             tst_val = RUNNING_DIFF(4);
02632             mask    = MASK(4);
02633             tst_val = RUNNING_DIFF(5);
02634             mask    = MASK(5);
02635             tst_val = RUNNING_DIFF(6);
02636             mask    = MASK(6);
02637             tst_val = RUNNING_DIFF(7);
02638             mask    = MASK(7);
02639             tst_val = RUNNING_DIFF(8);
02640             mask    = MASK(8);
02641             tst_val = RUNNING_DIFF(9);
02642             mask    = MASK(9);
02643             tst_val = RUNNING_DIFF(10);
02644             mask    = MASK(10);
02645             tst_val = RUNNING_DIFF(11);
02646             mask    = MASK(11);
02647             tst_val = RUNNING_DIFF(12);
02648             mask    = MASK(12);
02649             tst_val = RUNNING_DIFF(13);
02650             mask    = MASK(13);
02651             tst_val = RUNNING_DIFF(14);
02652             mask    = MASK(14);
02653             tst_val = RUNNING_DIFF(15);
02654             mask    = MASK(15);
02655             tst_val = RUNNING_DIFF(16);
02656             mask    = MASK(16);
02657             tst_val = RUNNING_DIFF(17);
02658             mask    = MASK(17);
02659             tst_val = RUNNING_DIFF(18);
02660             mask    = MASK(18);
02661             tst_val = RUNNING_DIFF(19);
02662             mask    = MASK(19);
02663             tst_val = RUNNING_DIFF(20);
02664             mask    = MASK(20);
02665             tst_val = RUNNING_DIFF(21);
02666             mask    = MASK(21);
02667             tst_val = RUNNING_DIFF(22);
02668             mask    = MASK(22);
02669             tst_val = RUNNING_DIFF(23);
02670             mask    = MASK(23);
02671             tst_val = RUNNING_DIFF(24);
02672             mask    = MASK(24);
02673             tst_val = RUNNING_DIFF(25);
02674             mask    = MASK(25);
02675             tst_val = RUNNING_DIFF(26);
02676             if (tst_val >= 0) {
02677                break;
02678             }
02679          }
02680          break;
02681 
02682       case 27:
02683          while (seg_len > 32) {
02684             for (idx = first + stride -1 ; idx <= last; idx += stride) {
02685                tst_val = DIFF(1);
02686                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02687                tst_val = RUNNING_DIFF(2);
02688                mask    = MASK(2);
02689                tst_val = RUNNING_DIFF(3);
02690                mask    = MASK(3);
02691                tst_val = RUNNING_DIFF(4);
02692                mask    = MASK(4);
02693                tst_val = RUNNING_DIFF(5);
02694                mask    = MASK(5);
02695                tst_val = RUNNING_DIFF(6);
02696                mask    = MASK(6);
02697                tst_val = RUNNING_DIFF(7);
02698                mask    = MASK(7);
02699                tst_val = RUNNING_DIFF(8);
02700                mask    = MASK(8);
02701                tst_val = RUNNING_DIFF(9);
02702                mask    = MASK(9);
02703                tst_val = RUNNING_DIFF(10);
02704                mask    = MASK(10);
02705                tst_val = RUNNING_DIFF(11);
02706                mask    = MASK(11);
02707                tst_val = RUNNING_DIFF(12);
02708                mask    = MASK(12);
02709                tst_val = RUNNING_DIFF(13);
02710                mask    = MASK(13);
02711                tst_val = RUNNING_DIFF(14);
02712                mask    = MASK(14);
02713                tst_val = RUNNING_DIFF(15);
02714                mask    = MASK(15);
02715                tst_val = RUNNING_DIFF(16);
02716                mask    = MASK(16);
02717                tst_val = RUNNING_DIFF(17);
02718                mask    = MASK(17);
02719                tst_val = RUNNING_DIFF(18);
02720                mask    = MASK(18);
02721                tst_val = RUNNING_DIFF(19);
02722                mask    = MASK(19);
02723                tst_val = RUNNING_DIFF(20);
02724                mask    = MASK(20);
02725                tst_val = RUNNING_DIFF(21);
02726                mask    = MASK(21);
02727                tst_val = RUNNING_DIFF(22);
02728                mask    = MASK(22);
02729                tst_val = RUNNING_DIFF(23);
02730                mask    = MASK(23);
02731                tst_val = RUNNING_DIFF(24);
02732                mask    = MASK(24);
02733                tst_val = RUNNING_DIFF(25);
02734                mask    = MASK(25);
02735                tst_val = RUNNING_DIFF(26);
02736                mask    = MASK(26);
02737                tst_val = RUNNING_DIFF(27);
02738                if (tst_val >= 0) {
02739                   break;
02740                }
02741             }  /* for */
02742             if (tst_val == 0) {
02743                 goto EXIT;
02744             }
02745             else if (tst_val > 0) {
02746                last = idx;
02747             }
02748             first   = idx - stride + 1;
02749             seg_len = last - first + 1;
02750             stride  = STRIDE_CALC(seg_len);
02751          }  /* end while seg_len > 32  */
02752 
02753          for (idx = first; idx <= last; idx += 1) {
02754             tst_val = DIFF(1);
02755             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02756             tst_val = RUNNING_DIFF(2);
02757             mask    = MASK(2);
02758             tst_val = RUNNING_DIFF(3);
02759             mask    = MASK(3);
02760             tst_val = RUNNING_DIFF(4);
02761             mask    = MASK(4);
02762             tst_val = RUNNING_DIFF(5);
02763             mask    = MASK(5);
02764             tst_val = RUNNING_DIFF(6);
02765             mask    = MASK(6);
02766             tst_val = RUNNING_DIFF(7);
02767             mask    = MASK(7);
02768             tst_val = RUNNING_DIFF(8);
02769             mask    = MASK(8);
02770             tst_val = RUNNING_DIFF(9);
02771             mask    = MASK(9);
02772             tst_val = RUNNING_DIFF(10);
02773             mask    = MASK(10);
02774             tst_val = RUNNING_DIFF(11);
02775             mask    = MASK(11);
02776             tst_val = RUNNING_DIFF(12);
02777             mask    = MASK(12);
02778             tst_val = RUNNING_DIFF(13);
02779             mask    = MASK(13);
02780             tst_val = RUNNING_DIFF(14);
02781             mask    = MASK(14);
02782             tst_val = RUNNING_DIFF(15);
02783             mask    = MASK(15);
02784             tst_val = RUNNING_DIFF(16);
02785             mask    = MASK(16);
02786             tst_val = RUNNING_DIFF(17);
02787             mask    = MASK(17);
02788             tst_val = RUNNING_DIFF(18);
02789             mask    = MASK(18);
02790             tst_val = RUNNING_DIFF(19);
02791             mask    = MASK(19);
02792             tst_val = RUNNING_DIFF(20);
02793             mask    = MASK(20);
02794             tst_val = RUNNING_DIFF(21);
02795             mask    = MASK(21);
02796             tst_val = RUNNING_DIFF(22);
02797             mask    = MASK(22);
02798             tst_val = RUNNING_DIFF(23);
02799             mask    = MASK(23);
02800             tst_val = RUNNING_DIFF(24);
02801             mask    = MASK(24);
02802             tst_val = RUNNING_DIFF(25);
02803             mask    = MASK(25);
02804             tst_val = RUNNING_DIFF(26);
02805             mask    = MASK(26);
02806             tst_val = RUNNING_DIFF(27);
02807             if (tst_val >= 0) {
02808                break;
02809             }
02810          }
02811          break;
02812 
02813       case 28:
02814          while (seg_len > 32) {
02815             for (idx = first + stride -1 ; idx <= last; idx += stride) {
02816                tst_val = DIFF(1);
02817                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02818                tst_val = RUNNING_DIFF(2);
02819                mask    = MASK(2);
02820                tst_val = RUNNING_DIFF(3);
02821                mask    = MASK(3);
02822                tst_val = RUNNING_DIFF(4);
02823                mask    = MASK(4);
02824                tst_val = RUNNING_DIFF(5);
02825                mask    = MASK(5);
02826                tst_val = RUNNING_DIFF(6);
02827                mask    = MASK(6);
02828                tst_val = RUNNING_DIFF(7);
02829                mask    = MASK(7);
02830                tst_val = RUNNING_DIFF(8);
02831                mask    = MASK(8);
02832                tst_val = RUNNING_DIFF(9);
02833                mask    = MASK(9);
02834                tst_val = RUNNING_DIFF(10);
02835                mask    = MASK(10);
02836                tst_val = RUNNING_DIFF(11);
02837                mask    = MASK(11);
02838                tst_val = RUNNING_DIFF(12);
02839                mask    = MASK(12);
02840                tst_val = RUNNING_DIFF(13);
02841                mask    = MASK(13);
02842                tst_val = RUNNING_DIFF(14);
02843                mask    = MASK(14);
02844                tst_val = RUNNING_DIFF(15);
02845                mask    = MASK(15);
02846                tst_val = RUNNING_DIFF(16);
02847                mask    = MASK(16);
02848                tst_val = RUNNING_DIFF(17);
02849                mask    = MASK(17);
02850                tst_val = RUNNING_DIFF(18);
02851                mask    = MASK(18);
02852                tst_val = RUNNING_DIFF(19);
02853                mask    = MASK(19);
02854                tst_val = RUNNING_DIFF(20);
02855                mask    = MASK(20);
02856                tst_val = RUNNING_DIFF(21);
02857                mask    = MASK(21);
02858                tst_val = RUNNING_DIFF(22);
02859                mask    = MASK(22);
02860                tst_val = RUNNING_DIFF(23);
02861                mask    = MASK(23);
02862                tst_val = RUNNING_DIFF(24);
02863                mask    = MASK(24);
02864                tst_val = RUNNING_DIFF(25);
02865                mask    = MASK(25);
02866                tst_val = RUNNING_DIFF(26);
02867                mask    = MASK(26);
02868                tst_val = RUNNING_DIFF(27);
02869                mask    = MASK(27);
02870                tst_val = RUNNING_DIFF(28);
02871                if (tst_val >= 0) {
02872                   break;
02873                }
02874             }  /* for */
02875             if (tst_val == 0) {
02876                 goto EXIT;
02877             }
02878             else if (tst_val > 0) {
02879                last = idx;
02880             }
02881             first   = idx - stride + 1;
02882             seg_len = last - first + 1;
02883             stride  = STRIDE_CALC(seg_len);
02884          }  /* end while seg_len > 32  */
02885 
02886          for (idx = first; idx <= last; idx += 1) {
02887             tst_val = DIFF(1);
02888             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02889             tst_val = RUNNING_DIFF(2);
02890             mask    = MASK(2);
02891             tst_val = RUNNING_DIFF(3);
02892             mask    = MASK(3);
02893             tst_val = RUNNING_DIFF(4);
02894             mask    = MASK(4);
02895             tst_val = RUNNING_DIFF(5);
02896             mask    = MASK(5);
02897             tst_val = RUNNING_DIFF(6);
02898             mask    = MASK(6);
02899             tst_val = RUNNING_DIFF(7);
02900             mask    = MASK(7);
02901             tst_val = RUNNING_DIFF(8);
02902             mask    = MASK(8);
02903             tst_val = RUNNING_DIFF(9);
02904             mask    = MASK(9);
02905             tst_val = RUNNING_DIFF(10);
02906             mask    = MASK(10);
02907             tst_val = RUNNING_DIFF(11);
02908             mask    = MASK(11);
02909             tst_val = RUNNING_DIFF(12);
02910             mask    = MASK(12);
02911             tst_val = RUNNING_DIFF(13);
02912             mask    = MASK(13);
02913             tst_val = RUNNING_DIFF(14);
02914             mask    = MASK(14);
02915             tst_val = RUNNING_DIFF(15);
02916             mask    = MASK(15);
02917             tst_val = RUNNING_DIFF(16);
02918             mask    = MASK(16);
02919             tst_val = RUNNING_DIFF(17);
02920             mask    = MASK(17);
02921             tst_val = RUNNING_DIFF(18);
02922             mask    = MASK(18);
02923             tst_val = RUNNING_DIFF(19);
02924             mask    = MASK(19);
02925             tst_val = RUNNING_DIFF(20);
02926             mask    = MASK(20);
02927             tst_val = RUNNING_DIFF(21);
02928             mask    = MASK(21);
02929             tst_val = RUNNING_DIFF(22);
02930             mask    = MASK(22);
02931             tst_val = RUNNING_DIFF(23);
02932             mask    = MASK(23);
02933             tst_val = RUNNING_DIFF(24);
02934             mask    = MASK(24);
02935             tst_val = RUNNING_DIFF(25);
02936             mask    = MASK(25);
02937             tst_val = RUNNING_DIFF(26);
02938             mask    = MASK(26);
02939             tst_val = RUNNING_DIFF(27);
02940             mask    = MASK(27);
02941             tst_val = RUNNING_DIFF(28);
02942             if (tst_val >= 0) {
02943                break;
02944             }
02945          }
02946          break;
02947 
02948       case 29:
02949          while (seg_len > 32) {
02950             for (idx = first + stride -1 ; idx <= last; idx += stride) {
02951                tst_val = DIFF(1);
02952                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
02953                tst_val = RUNNING_DIFF(2);
02954                mask    = MASK(2);
02955                tst_val = RUNNING_DIFF(3);
02956                mask    = MASK(3);
02957                tst_val = RUNNING_DIFF(4);
02958                mask    = MASK(4);
02959                tst_val = RUNNING_DIFF(5);
02960                mask    = MASK(5);
02961                tst_val = RUNNING_DIFF(6);
02962                mask    = MASK(6);
02963                tst_val = RUNNING_DIFF(7);
02964                mask    = MASK(7);
02965                tst_val = RUNNING_DIFF(8);
02966                mask    = MASK(8);
02967                tst_val = RUNNING_DIFF(9);
02968                mask    = MASK(9);
02969                tst_val = RUNNING_DIFF(10);
02970                mask    = MASK(10);
02971                tst_val = RUNNING_DIFF(11);
02972                mask    = MASK(11);
02973                tst_val = RUNNING_DIFF(12);
02974                mask    = MASK(12);
02975                tst_val = RUNNING_DIFF(13);
02976                mask    = MASK(13);
02977                tst_val = RUNNING_DIFF(14);
02978                mask    = MASK(14);
02979                tst_val = RUNNING_DIFF(15);
02980                mask    = MASK(15);
02981                tst_val = RUNNING_DIFF(16);
02982                mask    = MASK(16);
02983                tst_val = RUNNING_DIFF(17);
02984                mask    = MASK(17);
02985                tst_val = RUNNING_DIFF(18);
02986                mask    = MASK(18);
02987                tst_val = RUNNING_DIFF(19);
02988                mask    = MASK(19);
02989                tst_val = RUNNING_DIFF(20);
02990                mask    = MASK(20);
02991                tst_val = RUNNING_DIFF(21);
02992                mask    = MASK(21);
02993                tst_val = RUNNING_DIFF(22);
02994                mask    = MASK(22);
02995                tst_val = RUNNING_DIFF(23);
02996                mask    = MASK(23);
02997                tst_val = RUNNING_DIFF(24);
02998                mask    = MASK(24);
02999                tst_val = RUNNING_DIFF(25);
03000                mask    = MASK(25);
03001                tst_val = RUNNING_DIFF(26);
03002                mask    = MASK(26);
03003                tst_val = RUNNING_DIFF(27);
03004                mask    = MASK(27);
03005                tst_val = RUNNING_DIFF(28);
03006                mask    = MASK(28);
03007                tst_val = RUNNING_DIFF(29);
03008                if (tst_val >= 0) {
03009                   break;
03010                }
03011             }  /* for */
03012             if (tst_val == 0) {
03013                 goto EXIT;
03014             }
03015             else if (tst_val > 0) {
03016                last = idx;
03017             }
03018             first   = idx - stride + 1;
03019             seg_len = last - first + 1;
03020             stride  = STRIDE_CALC(seg_len);
03021          }  /* end while seg_len > 32  */
03022 
03023          for (idx = first; idx <= last; idx += 1) {
03024             tst_val = DIFF(1);
03025             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
03026             tst_val = RUNNING_DIFF(2);
03027             mask    = MASK(2);
03028             tst_val = RUNNING_DIFF(3);
03029             mask    = MASK(3);
03030             tst_val = RUNNING_DIFF(4);
03031             mask    = MASK(4);
03032             tst_val = RUNNING_DIFF(5);
03033             mask    = MASK(5);
03034             tst_val = RUNNING_DIFF(6);
03035             mask    = MASK(6);
03036             tst_val = RUNNING_DIFF(7);
03037             mask    = MASK(7);
03038             tst_val = RUNNING_DIFF(8);
03039             mask    = MASK(8);
03040             tst_val = RUNNING_DIFF(9);
03041             mask    = MASK(9);
03042             tst_val = RUNNING_DIFF(10);
03043             mask    = MASK(10);
03044             tst_val = RUNNING_DIFF(11);
03045             mask    = MASK(11);
03046             tst_val = RUNNING_DIFF(12);
03047             mask    = MASK(12);
03048             tst_val = RUNNING_DIFF(13);
03049             mask    = MASK(13);
03050             tst_val = RUNNING_DIFF(14);
03051             mask    = MASK(14);
03052             tst_val = RUNNING_DIFF(15);
03053             mask    = MASK(15);
03054             tst_val = RUNNING_DIFF(16);
03055             mask    = MASK(16);
03056             tst_val = RUNNING_DIFF(17);
03057             mask    = MASK(17);
03058             tst_val = RUNNING_DIFF(18);
03059             mask    = MASK(18);
03060             tst_val = RUNNING_DIFF(19);
03061             mask    = MASK(19);
03062             tst_val = RUNNING_DIFF(20);
03063             mask    = MASK(20);
03064             tst_val = RUNNING_DIFF(21);
03065             mask    = MASK(21);
03066             tst_val = RUNNING_DIFF(22);
03067             mask    = MASK(22);
03068             tst_val = RUNNING_DIFF(23);
03069             mask    = MASK(23);
03070             tst_val = RUNNING_DIFF(24);
03071             mask    = MASK(24);
03072             tst_val = RUNNING_DIFF(25);
03073             mask    = MASK(25);
03074             tst_val = RUNNING_DIFF(26);
03075             mask    = MASK(26);
03076             tst_val = RUNNING_DIFF(27);
03077             mask    = MASK(27);
03078             tst_val = RUNNING_DIFF(28);
03079             mask    = MASK(28);
03080             tst_val = RUNNING_DIFF(29);
03081             if (tst_val >= 0) {
03082                break;
03083             }
03084          }
03085          break;
03086 
03087       case 30:
03088          while (seg_len > 32) {
03089             for (idx = first + stride -1 ; idx <= last; idx += stride) {
03090                tst_val = DIFF(1);
03091                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
03092                tst_val = RUNNING_DIFF(2);
03093                mask    = MASK(2);
03094                tst_val = RUNNING_DIFF(3);
03095                mask    = MASK(3);
03096                tst_val = RUNNING_DIFF(4);
03097                mask    = MASK(4);
03098                tst_val = RUNNING_DIFF(5);
03099                mask    = MASK(5);
03100                tst_val = RUNNING_DIFF(6);
03101                mask    = MASK(6);
03102                tst_val = RUNNING_DIFF(7);
03103                mask    = MASK(7);
03104                tst_val = RUNNING_DIFF(8);
03105                mask    = MASK(8);
03106                tst_val = RUNNING_DIFF(9);
03107                mask    = MASK(9);
03108                tst_val = RUNNING_DIFF(10);
03109                mask    = MASK(10);
03110                tst_val = RUNNING_DIFF(11);
03111                mask    = MASK(11);
03112                tst_val = RUNNING_DIFF(12);
03113                mask    = MASK(12);
03114                tst_val = RUNNING_DIFF(13);
03115                mask    = MASK(13);
03116                tst_val = RUNNING_DIFF(14);
03117                mask    = MASK(14);
03118                tst_val = RUNNING_DIFF(15);
03119                mask    = MASK(15);
03120                tst_val = RUNNING_DIFF(16);
03121                mask    = MASK(16);
03122                tst_val = RUNNING_DIFF(17);
03123                mask    = MASK(17);
03124                tst_val = RUNNING_DIFF(18);
03125                mask    = MASK(18);
03126                tst_val = RUNNING_DIFF(19);
03127                mask    = MASK(19);
03128                tst_val = RUNNING_DIFF(20);
03129                mask    = MASK(20);
03130                tst_val = RUNNING_DIFF(21);
03131                mask    = MASK(21);
03132                tst_val = RUNNING_DIFF(22);
03133                mask    = MASK(22);
03134                tst_val = RUNNING_DIFF(23);
03135                mask    = MASK(23);
03136                tst_val = RUNNING_DIFF(24);
03137                mask    = MASK(24);
03138                tst_val = RUNNING_DIFF(25);
03139                mask    = MASK(25);
03140                tst_val = RUNNING_DIFF(26);
03141                mask    = MASK(26);
03142                tst_val = RUNNING_DIFF(27);
03143                mask    = MASK(27);
03144                tst_val = RUNNING_DIFF(28);
03145                mask    = MASK(28);
03146                tst_val = RUNNING_DIFF(29);
03147                mask    = MASK(29);
03148                tst_val = RUNNING_DIFF(30);
03149                if (tst_val >= 0) {
03150                   break;
03151                }
03152             }  /* for */
03153             if (tst_val == 0) {
03154                 goto EXIT;
03155             }
03156             else if (tst_val > 0) {
03157                last = idx;
03158             }
03159             first   = idx - stride + 1;
03160             seg_len = last - first + 1;
03161             stride  = STRIDE_CALC(seg_len);
03162          }  /* end while seg_len > 32  */
03163 
03164          for (idx = first; idx <= last; idx += 1) {
03165             tst_val = DIFF(1);
03166             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
03167             tst_val = RUNNING_DIFF(2);
03168             mask    = MASK(2);
03169             tst_val = RUNNING_DIFF(3);
03170             mask    = MASK(3);
03171             tst_val = RUNNING_DIFF(4);
03172             mask    = MASK(4);
03173             tst_val = RUNNING_DIFF(5);
03174             mask    = MASK(5);
03175             tst_val = RUNNING_DIFF(6);
03176             mask    = MASK(6);
03177             tst_val = RUNNING_DIFF(7);
03178             mask    = MASK(7);
03179             tst_val = RUNNING_DIFF(8);
03180             mask    = MASK(8);
03181             tst_val = RUNNING_DIFF(9);
03182             mask    = MASK(9);
03183             tst_val = RUNNING_DIFF(10);
03184             mask    = MASK(10);
03185             tst_val = RUNNING_DIFF(11);
03186             mask    = MASK(11);
03187             tst_val = RUNNING_DIFF(12);
03188             mask    = MASK(12);
03189             tst_val = RUNNING_DIFF(13);
03190             mask    = MASK(13);
03191             tst_val = RUNNING_DIFF(14);
03192             mask    = MASK(14);
03193             tst_val = RUNNING_DIFF(15);
03194             mask    = MASK(15);
03195             tst_val = RUNNING_DIFF(16);
03196             mask    = MASK(16);
03197             tst_val = RUNNING_DIFF(17);
03198             mask    = MASK(17);
03199             tst_val = RUNNING_DIFF(18);
03200             mask    = MASK(18);
03201             tst_val = RUNNING_DIFF(19);
03202             mask    = MASK(19);
03203             tst_val = RUNNING_DIFF(20);
03204             mask    = MASK(20);
03205             tst_val = RUNNING_DIFF(21);
03206             mask    = MASK(21);
03207             tst_val = RUNNING_DIFF(22);
03208             mask    = MASK(22);
03209             tst_val = RUNNING_DIFF(23);
03210             mask    = MASK(23);
03211             tst_val = RUNNING_DIFF(24);
03212             mask    = MASK(24);
03213             tst_val = RUNNING_DIFF(25);
03214             mask    = MASK(25);
03215             tst_val = RUNNING_DIFF(26);
03216             mask    = MASK(26);
03217             tst_val = RUNNING_DIFF(27);
03218             mask    = MASK(27);
03219             tst_val = RUNNING_DIFF(28);
03220             mask    = MASK(28);
03221             tst_val = RUNNING_DIFF(29);
03222             mask    = MASK(29);
03223             tst_val = RUNNING_DIFF(30);
03224             if (tst_val >= 0) {
03225                break;
03226             }
03227          }
03228          break;
03229 
03230       case 31:
03231          while (seg_len > 32) {
03232             for (idx = first + stride -1 ; idx <= last; idx += stride) {
03233                tst_val = DIFF(1);
03234                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
03235                tst_val = RUNNING_DIFF(2);
03236                mask    = MASK(2);
03237                tst_val = RUNNING_DIFF(3);
03238                mask    = MASK(3);
03239                tst_val = RUNNING_DIFF(4);
03240                mask    = MASK(4);
03241                tst_val = RUNNING_DIFF(5);
03242                mask    = MASK(5);
03243                tst_val = RUNNING_DIFF(6);
03244                mask    = MASK(6);
03245                tst_val = RUNNING_DIFF(7);
03246                mask    = MASK(7);
03247                tst_val = RUNNING_DIFF(8);
03248                mask    = MASK(8);
03249                tst_val = RUNNING_DIFF(9);
03250                mask    = MASK(9);
03251                tst_val = RUNNING_DIFF(10);
03252                mask    = MASK(10);
03253                tst_val = RUNNING_DIFF(11);
03254                mask    = MASK(11);
03255                tst_val = RUNNING_DIFF(12);
03256                mask    = MASK(12);
03257                tst_val = RUNNING_DIFF(13);
03258                mask    = MASK(13);
03259                tst_val = RUNNING_DIFF(14);
03260                mask    = MASK(14);
03261                tst_val = RUNNING_DIFF(15);
03262                mask    = MASK(15);
03263                tst_val = RUNNING_DIFF(16);
03264                mask    = MASK(16);
03265                tst_val = RUNNING_DIFF(17);
03266                mask    = MASK(17);
03267                tst_val = RUNNING_DIFF(18);
03268                mask    = MASK(18);
03269                tst_val = RUNNING_DIFF(19);
03270                mask    = MASK(19);
03271                tst_val = RUNNING_DIFF(20);
03272                mask    = MASK(20);
03273                tst_val = RUNNING_DIFF(21);
03274                mask    = MASK(21);
03275                tst_val = RUNNING_DIFF(22);
03276                mask    = MASK(22);
03277                tst_val = RUNNING_DIFF(23);
03278                mask    = MASK(23);
03279                tst_val = RUNNING_DIFF(24);
03280                mask    = MASK(24);
03281                tst_val = RUNNING_DIFF(25);
03282                mask    = MASK(25);
03283                tst_val = RUNNING_DIFF(26);
03284                mask    = MASK(26);
03285                tst_val = RUNNING_DIFF(27);
03286                mask    = MASK(27);
03287                tst_val = RUNNING_DIFF(28);
03288                mask    = MASK(28);
03289                tst_val = RUNNING_DIFF(29);
03290                mask    = MASK(29);
03291                tst_val = RUNNING_DIFF(30);
03292                mask    = MASK(30);
03293                tst_val = RUNNING_DIFF(31);
03294                if (tst_val >= 0) {
03295                   break;
03296                }
03297             }  /* for */
03298             if (tst_val == 0) {
03299                 goto EXIT;
03300             }
03301             else if (tst_val > 0) {
03302                last = idx;
03303             }
03304             first   = idx - stride + 1;
03305             seg_len = last - first + 1;
03306             stride  = STRIDE_CALC(seg_len);
03307          }  /* end while seg_len > 32  */
03308 
03309          for (idx = first; idx <= last; idx += 1) {
03310             tst_val = DIFF(1);
03311             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
03312             tst_val = RUNNING_DIFF(2);
03313             mask    = MASK(2);
03314             tst_val = RUNNING_DIFF(3);
03315             mask    = MASK(3);
03316             tst_val = RUNNING_DIFF(4);
03317             mask    = MASK(4);
03318             tst_val = RUNNING_DIFF(5);
03319             mask    = MASK(5);
03320             tst_val = RUNNING_DIFF(6);
03321             mask    = MASK(6);
03322             tst_val = RUNNING_DIFF(7);
03323             mask    = MASK(7);
03324             tst_val = RUNNING_DIFF(8);
03325             mask    = MASK(8);
03326             tst_val = RUNNING_DIFF(9);
03327             mask    = MASK(9);
03328             tst_val = RUNNING_DIFF(10);
03329             mask    = MASK(10);
03330             tst_val = RUNNING_DIFF(11);
03331             mask    = MASK(11);
03332             tst_val = RUNNING_DIFF(12);
03333             mask    = MASK(12);
03334             tst_val = RUNNING_DIFF(13);
03335             mask    = MASK(13);
03336             tst_val = RUNNING_DIFF(14);
03337             mask    = MASK(14);
03338             tst_val = RUNNING_DIFF(15);
03339             mask    = MASK(15);
03340             tst_val = RUNNING_DIFF(16);
03341             mask    = MASK(16);
03342             tst_val = RUNNING_DIFF(17);
03343             mask    = MASK(17);
03344             tst_val = RUNNING_DIFF(18);
03345             mask    = MASK(18);
03346             tst_val = RUNNING_DIFF(19);
03347             mask    = MASK(19);
03348             tst_val = RUNNING_DIFF(20);
03349             mask    = MASK(20);
03350             tst_val = RUNNING_DIFF(21);
03351             mask    = MASK(21);
03352             tst_val = RUNNING_DIFF(22);
03353             mask    = MASK(22);
03354             tst_val = RUNNING_DIFF(23);
03355             mask    = MASK(23);
03356             tst_val = RUNNING_DIFF(24);
03357             mask    = MASK(24);
03358             tst_val = RUNNING_DIFF(25);
03359             mask    = MASK(25);
03360             tst_val = RUNNING_DIFF(26);
03361             mask    = MASK(26);
03362             tst_val = RUNNING_DIFF(27);
03363             mask    = MASK(27);
03364             tst_val = RUNNING_DIFF(28);
03365             mask    = MASK(28);
03366             tst_val = RUNNING_DIFF(29);
03367             mask    = MASK(29);
03368             tst_val = RUNNING_DIFF(30);
03369             mask    = MASK(30);
03370             tst_val = RUNNING_DIFF(31);
03371             if (tst_val >= 0) {
03372                break;
03373             }
03374          }
03375          break;
03376 
03377       case 32:
03378          while (seg_len > 32) {
03379             for (idx = first + stride -1 ; idx <= last; idx += stride) {
03380                tst_val = DIFF(1);
03381                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
03382                tst_val = RUNNING_DIFF(2);
03383                mask    = MASK(2);
03384                tst_val = RUNNING_DIFF(3);
03385                mask    = MASK(3);
03386                tst_val = RUNNING_DIFF(4);
03387                mask    = MASK(4);
03388                tst_val = RUNNING_DIFF(5);
03389                mask    = MASK(5);
03390                tst_val = RUNNING_DIFF(6);
03391                mask    = MASK(6);
03392                tst_val = RUNNING_DIFF(7);
03393                mask    = MASK(7);
03394                tst_val = RUNNING_DIFF(8);
03395                mask    = MASK(8);
03396                tst_val = RUNNING_DIFF(9);
03397                mask    = MASK(9);
03398                tst_val = RUNNING_DIFF(10);
03399                mask    = MASK(10);
03400                tst_val = RUNNING_DIFF(11);
03401                mask    = MASK(11);
03402                tst_val = RUNNING_DIFF(12);
03403                mask    = MASK(12);
03404                tst_val = RUNNING_DIFF(13);
03405                mask    = MASK(13);
03406                tst_val = RUNNING_DIFF(14);
03407                mask    = MASK(14);
03408                tst_val = RUNNING_DIFF(15);
03409                mask    = MASK(15);
03410                tst_val = RUNNING_DIFF(16);
03411                mask    = MASK(16);
03412                tst_val = RUNNING_DIFF(17);
03413                mask    = MASK(17);
03414                tst_val = RUNNING_DIFF(18);
03415                mask    = MASK(18);
03416                tst_val = RUNNING_DIFF(19);
03417                mask    = MASK(19);
03418                tst_val = RUNNING_DIFF(20);
03419                mask    = MASK(20);
03420                tst_val = RUNNING_DIFF(21);
03421                mask    = MASK(21);
03422                tst_val = RUNNING_DIFF(22);
03423                mask    = MASK(22);
03424                tst_val = RUNNING_DIFF(23);
03425                mask    = MASK(23);
03426                tst_val = RUNNING_DIFF(24);
03427                mask    = MASK(24);
03428                tst_val = RUNNING_DIFF(25);
03429                mask    = MASK(25);
03430                tst_val = RUNNING_DIFF(26);
03431                mask    = MASK(26);
03432                tst_val = RUNNING_DIFF(27);
03433                mask    = MASK(27);
03434                tst_val = RUNNING_DIFF(28);
03435                mask    = MASK(28);
03436                tst_val = RUNNING_DIFF(29);
03437                mask    = MASK(29);
03438                tst_val = RUNNING_DIFF(30);
03439                mask    = MASK(30);
03440                tst_val = RUNNING_DIFF(31);
03441                mask    = MASK(31);
03442                tst_val = RUNNING_DIFF(32);
03443                if (tst_val >= 0) {
03444                   break;
03445                }
03446             }  /* for */
03447             if (tst_val == 0) {
03448                 goto EXIT;
03449             }
03450             else if (tst_val > 0) {
03451                last = idx;
03452             }
03453             first   = idx - stride + 1;
03454             seg_len = last - first + 1;
03455             stride  = STRIDE_CALC(seg_len);
03456          }  /* end while seg_len > 32  */
03457 
03458          for (idx = first; idx <= last; idx += 1) {
03459             tst_val = DIFF(1);
03460             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
03461             tst_val = RUNNING_DIFF(2);
03462             mask    = MASK(2);
03463             tst_val = RUNNING_DIFF(3);
03464             mask    = MASK(3);
03465             tst_val = RUNNING_DIFF(4);
03466             mask    = MASK(4);
03467             tst_val = RUNNING_DIFF(5);
03468             mask    = MASK(5);
03469             tst_val = RUNNING_DIFF(6);
03470             mask    = MASK(6);
03471             tst_val = RUNNING_DIFF(7);
03472             mask    = MASK(7);
03473             tst_val = RUNNING_DIFF(8);
03474             mask    = MASK(8);
03475             tst_val = RUNNING_DIFF(9);
03476             mask    = MASK(9);
03477             tst_val = RUNNING_DIFF(10);
03478             mask    = MASK(10);
03479             tst_val = RUNNING_DIFF(11);
03480             mask    = MASK(11);
03481             tst_val = RUNNING_DIFF(12);
03482             mask    = MASK(12);
03483             tst_val = RUNNING_DIFF(13);
03484             mask    = MASK(13);
03485             tst_val = RUNNING_DIFF(14);
03486             mask    = MASK(14);
03487             tst_val = RUNNING_DIFF(15);
03488             mask    = MASK(15);
03489             tst_val = RUNNING_DIFF(16);
03490             mask    = MASK(16);
03491             tst_val = RUNNING_DIFF(17);
03492             mask    = MASK(17);
03493             tst_val = RUNNING_DIFF(18);
03494             mask    = MASK(18);
03495             tst_val = RUNNING_DIFF(19);
03496             mask    = MASK(19);
03497             tst_val = RUNNING_DIFF(20);
03498             mask    = MASK(20);
03499             tst_val = RUNNING_DIFF(21);
03500             mask    = MASK(21);
03501             tst_val = RUNNING_DIFF(22);
03502             mask    = MASK(22);
03503             tst_val = RUNNING_DIFF(23);
03504             mask    = MASK(23);
03505             tst_val = RUNNING_DIFF(24);
03506             mask    = MASK(24);
03507             tst_val = RUNNING_DIFF(25);
03508             mask    = MASK(25);
03509             tst_val = RUNNING_DIFF(26);
03510             mask    = MASK(26);
03511             tst_val = RUNNING_DIFF(27);
03512             mask    = MASK(27);
03513             tst_val = RUNNING_DIFF(28);
03514             mask    = MASK(28);
03515             tst_val = RUNNING_DIFF(29);
03516             mask    = MASK(29);
03517             tst_val = RUNNING_DIFF(30);
03518             mask    = MASK(30);
03519             tst_val = RUNNING_DIFF(31);
03520             mask    = MASK(31);
03521             tst_val = RUNNING_DIFF(32);
03522             if (tst_val >= 0) {
03523                break;
03524             }
03525          }
03526          break;
03527 
03528       case 33:
03529          while (seg_len > 32) {
03530             for (idx = first + stride -1 ; idx <= last; idx += stride) {
03531                tst_val = DIFF(1);
03532                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
03533                tst_val = RUNNING_DIFF(2);
03534                mask    = MASK(2);
03535                tst_val = RUNNING_DIFF(3);
03536                mask    = MASK(3);
03537                tst_val = RUNNING_DIFF(4);
03538                mask    = MASK(4);
03539                tst_val = RUNNING_DIFF(5);
03540                mask    = MASK(5);
03541                tst_val = RUNNING_DIFF(6);
03542                mask    = MASK(6);
03543                tst_val = RUNNING_DIFF(7);
03544                mask    = MASK(7);
03545                tst_val = RUNNING_DIFF(8);
03546                mask    = MASK(8);
03547                tst_val = RUNNING_DIFF(9);
03548                mask    = MASK(9);
03549                tst_val = RUNNING_DIFF(10);
03550                mask    = MASK(10);
03551                tst_val = RUNNING_DIFF(11);
03552                mask    = MASK(11);
03553                tst_val = RUNNING_DIFF(12);
03554                mask    = MASK(12);
03555                tst_val = RUNNING_DIFF(13);
03556                mask    = MASK(13);
03557                tst_val = RUNNING_DIFF(14);
03558                mask    = MASK(14);
03559                tst_val = RUNNING_DIFF(15);
03560                mask    = MASK(15);
03561                tst_val = RUNNING_DIFF(16);
03562                mask    = MASK(16);
03563                tst_val = RUNNING_DIFF(17);
03564                mask    = MASK(17);
03565                tst_val = RUNNING_DIFF(18);
03566                mask    = MASK(18);
03567                tst_val = RUNNING_DIFF(19);
03568                mask    = MASK(19);
03569                tst_val = RUNNING_DIFF(20);
03570                mask    = MASK(20);
03571                tst_val = RUNNING_DIFF(21);
03572                mask    = MASK(21);
03573                tst_val = RUNNING_DIFF(22);
03574                mask    = MASK(22);
03575                tst_val = RUNNING_DIFF(23);
03576                mask    = MASK(23);
03577                tst_val = RUNNING_DIFF(24);
03578                mask    = MASK(24);
03579                tst_val = RUNNING_DIFF(25);
03580                mask    = MASK(25);
03581                tst_val = RUNNING_DIFF(26);
03582                mask    = MASK(26);
03583                tst_val = RUNNING_DIFF(27);
03584                mask    = MASK(27);
03585                tst_val = RUNNING_DIFF(28);
03586                mask    = MASK(28);
03587                tst_val = RUNNING_DIFF(29);
03588                mask    = MASK(29);
03589                tst_val = RUNNING_DIFF(30);
03590                mask    = MASK(30);
03591                tst_val = RUNNING_DIFF(31);
03592                mask    = MASK(31);
03593                tst_val = RUNNING_DIFF(32);
03594                mask    = MASK(32);
03595                tst_val = RUNNING_DIFF(33);
03596                if (tst_val >= 0) {
03597                   break;
03598                }
03599             }  /* for */
03600             if (tst_val == 0) {
03601                 goto EXIT;
03602             }
03603             else if (tst_val > 0) {
03604                last = idx;
03605             }
03606             first   = idx - stride + 1;
03607             seg_len = last - first + 1;
03608             stride  = STRIDE_CALC(seg_len);
03609          }  /* end while seg_len > 32  */
03610 
03611          for (idx = first; idx <= last; idx += 1) {
03612             tst_val = DIFF(1);
03613             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
03614             tst_val = RUNNING_DIFF(2);
03615             mask    = MASK(2);
03616             tst_val = RUNNING_DIFF(3);
03617             mask    = MASK(3);
03618             tst_val = RUNNING_DIFF(4);
03619             mask    = MASK(4);
03620             tst_val = RUNNING_DIFF(5);
03621             mask    = MASK(5);
03622             tst_val = RUNNING_DIFF(6);
03623             mask    = MASK(6);
03624             tst_val = RUNNING_DIFF(7);
03625             mask    = MASK(7);
03626             tst_val = RUNNING_DIFF(8);
03627             mask    = MASK(8);
03628             tst_val = RUNNING_DIFF(9);
03629             mask    = MASK(9);
03630             tst_val = RUNNING_DIFF(10);
03631             mask    = MASK(10);
03632             tst_val = RUNNING_DIFF(11);
03633             mask    = MASK(11);
03634             tst_val = RUNNING_DIFF(12);
03635             mask    = MASK(12);
03636             tst_val = RUNNING_DIFF(13);
03637             mask    = MASK(13);
03638             tst_val = RUNNING_DIFF(14);
03639             mask    = MASK(14);
03640             tst_val = RUNNING_DIFF(15);
03641             mask    = MASK(15);
03642             tst_val = RUNNING_DIFF(16);
03643             mask    = MASK(16);
03644             tst_val = RUNNING_DIFF(17);
03645             mask    = MASK(17);
03646             tst_val = RUNNING_DIFF(18);
03647             mask    = MASK(18);
03648             tst_val = RUNNING_DIFF(19);
03649             mask    = MASK(19);
03650             tst_val = RUNNING_DIFF(20);
03651             mask    = MASK(20);
03652             tst_val = RUNNING_DIFF(21);
03653             mask    = MASK(21);
03654             tst_val = RUNNING_DIFF(22);
03655             mask    = MASK(22);
03656             tst_val = RUNNING_DIFF(23);
03657             mask    = MASK(23);
03658             tst_val = RUNNING_DIFF(24);
03659             mask    = MASK(24);
03660             tst_val = RUNNING_DIFF(25);
03661             mask    = MASK(25);
03662             tst_val = RUNNING_DIFF(26);
03663             mask    = MASK(26);
03664             tst_val = RUNNING_DIFF(27);
03665             mask    = MASK(27);
03666             tst_val = RUNNING_DIFF(28);
03667             mask    = MASK(28);
03668             tst_val = RUNNING_DIFF(29);
03669             mask    = MASK(29);
03670             tst_val = RUNNING_DIFF(30);
03671             mask    = MASK(30);
03672             tst_val = RUNNING_DIFF(31);
03673             mask    = MASK(31);
03674             tst_val = RUNNING_DIFF(32);
03675             mask    = MASK(32);
03676             tst_val = RUNNING_DIFF(33);
03677             if (tst_val >= 0) {
03678                break;
03679             }
03680          }
03681          break;
03682 
03683       case 34:
03684          while (seg_len > 32) {
03685             for (idx = first + stride -1 ; idx <= last; idx += stride) {
03686                tst_val = DIFF(1);
03687                mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
03688                tst_val = RUNNING_DIFF(2);
03689                mask    = MASK(2);
03690                tst_val = RUNNING_DIFF(3);
03691                mask    = MASK(3);
03692                tst_val = RUNNING_DIFF(4);
03693                mask    = MASK(4);
03694                tst_val = RUNNING_DIFF(5);
03695                mask    = MASK(5);
03696                tst_val = RUNNING_DIFF(6);
03697                mask    = MASK(6);
03698                tst_val = RUNNING_DIFF(7);
03699                mask    = MASK(7);
03700                tst_val = RUNNING_DIFF(8);
03701                mask    = MASK(8);
03702                tst_val = RUNNING_DIFF(9);
03703                mask    = MASK(9);
03704                tst_val = RUNNING_DIFF(10);
03705                mask    = MASK(10);
03706                tst_val = RUNNING_DIFF(11);
03707                mask    = MASK(11);
03708                tst_val = RUNNING_DIFF(12);
03709                mask    = MASK(12);
03710                tst_val = RUNNING_DIFF(13);
03711                mask    = MASK(13);
03712                tst_val = RUNNING_DIFF(14);
03713                mask    = MASK(14);
03714                tst_val = RUNNING_DIFF(15);
03715                mask    = MASK(15);
03716                tst_val = RUNNING_DIFF(16);
03717                mask    = MASK(16);
03718                tst_val = RUNNING_DIFF(17);
03719                mask    = MASK(17);
03720                tst_val = RUNNING_DIFF(18);
03721                mask    = MASK(18);
03722                tst_val = RUNNING_DIFF(19);
03723                mask    = MASK(19);
03724                tst_val = RUNNING_DIFF(20);
03725                mask    = MASK(20);
03726                tst_val = RUNNING_DIFF(21);
03727                mask    = MASK(21);
03728                tst_val = RUNNING_DIFF(22);
03729                mask    = MASK(22);
03730                tst_val = RUNNING_DIFF(23);
03731                mask    = MASK(23);
03732                tst_val = RUNNING_DIFF(24);
03733                mask    = MASK(24);
03734                tst_val = RUNNING_DIFF(25);
03735                mask    = MASK(25);
03736                tst_val = RUNNING_DIFF(26);
03737                mask    = MASK(26);
03738                tst_val = RUNNING_DIFF(27);
03739                mask    = MASK(27);
03740                tst_val = RUNNING_DIFF(28);
03741                mask    = MASK(28);
03742                tst_val = RUNNING_DIFF(29);
03743                mask    = MASK(29);
03744                tst_val = RUNNING_DIFF(30);
03745                mask    = MASK(30);
03746                tst_val = RUNNING_DIFF(31);
03747                mask    = MASK(31);
03748                tst_val = RUNNING_DIFF(32);
03749                mask    = MASK(32);
03750                tst_val = RUNNING_DIFF(33);
03751                mask    = MASK(33);
03752                tst_val = RUNNING_DIFF(34);
03753                if (tst_val >= 0) {
03754                   break;
03755                }
03756             }  /* for */
03757             if (tst_val == 0) {
03758                 goto EXIT;
03759             }
03760             else if (tst_val > 0) {
03761                last = idx;
03762             }
03763             first   = idx - stride + 1;
03764             seg_len = last - first + 1;
03765             stride  = STRIDE_CALC(seg_len);
03766          }  /* end while seg_len > 32  */
03767 
03768          for (idx = first; idx <= last; idx += 1) {
03769             tst_val = DIFF(1);
03770             mask    = -(RIGHT_JUSTIFY_SIGN_BIT(DIFF(1) | -DIFF(1)));
03771             tst_val = RUNNING_DIFF(2);
03772             mask    = MASK(2);
03773             tst_val = RUNNING_DIFF(3);
03774             mask    = MASK(3);
03775             tst_val = RUNNING_DIFF(4);
03776             mask    = MASK(4);
03777             tst_val = RUNNING_DIFF(5);
03778             mask    = MASK(5);
03779             tst_val = RUNNING_DIFF(6);
03780             mask    = MASK(6);
03781             tst_val = RUNNING_DIFF(7);
03782             mask    = MASK(7);
03783             tst_val = RUNNING_DIFF(8);
03784             mask    = MASK(8);
03785             tst_val = RUNNING_DIFF(9);
03786             mask    = MASK(9);
03787             tst_val = RUNNING_DIFF(10);
03788             mask    = MASK(10);
03789             tst_val = RUNNING_DIFF(11);
03790             mask    = MASK(11);
03791             tst_val = RUNNING_DIFF(12);
03792             mask    = MASK(12);
03793             tst_val = RUNNING_DIFF(13);
03794             mask    = MASK(13);
03795             tst_val = RUNNING_DIFF(14);
03796             mask    = MASK(14);
03797             tst_val = RUNNING_DIFF(15);
03798             mask    = MASK(15);
03799             tst_val = RUNNING_DIFF(16);
03800             mask    = MASK(16);
03801             tst_val = RUNNING_DIFF(17);
03802             mask    = MASK(17);
03803             tst_val = RUNNING_DIFF(18);
03804             mask    = MASK(18);
03805             tst_val = RUNNING_DIFF(19);
03806             mask    = MASK(19);
03807             tst_val = RUNNING_DIFF(20);
03808             mask    = MASK(20);
03809             tst_val = RUNNING_DIFF(21);
03810             mask    = MASK(21);
03811             tst_val = RUNNING_DIFF(22);
03812             mask    = MASK(22);
03813             tst_val = RUNNING_DIFF(23);
03814             mask    = MASK(23);
03815             tst_val = RUNNING_DIFF(24);
03816             mask    = MASK(24);
03817             tst_val = RUNNING_DIFF(25);
03818             mask    = MASK(25);
03819             tst_val = RUNNING_DIFF(26);
03820             mask    = MASK(26);
03821             tst_val = RUNNING_DIFF(27);
03822             mask    = MASK(27);
03823             tst_val = RUNNING_DIFF(28);
03824             mask    = MASK(28);
03825             tst_val = RUNNING_DIFF(29);
03826             mask    = MASK(29);
03827             tst_val = RUNNING_DIFF(30);
03828             mask    = MASK(30);
03829             tst_val = RUNNING_DIFF(31);
03830             mask    = MASK(31);
03831             tst_val = RUNNING_DIFF(32);
03832             mask    = MASK(32);
03833             tst_val = RUNNING_DIFF(33);
03834             mask    = MASK(33);
03835             tst_val = RUNNING_DIFF(34);
03836             if (tst_val >= 0) {
03837                break;
03838             }
03839          }
03840          break;
03841 # endif
03842 /* # endif */ /* if 0 */
03843 
03844      default: 
03845 
03846          PRINTMSG(stmt_start_line, 196, Internal, 1,
03847                   "srch_name_tbl", 256);
03848          break;
03849    }  /* switch (id_len) */
03850 
03851 EXIT:
03852 
03853    *name_idx = idx;
03854 
03855    TRACE (Func_Exit, "srch_name_tbl", NULL);
03856 
03857    return (tst_val);
03858 
03859 }  /* srch_name_tbl */
03860 /******************************************************************************\
03861 |*                                                                            *|
03862 |* Description:                                                               *|
03863 |*                                                                            *|
03864 |*      Convert a host integer to a string to be used in printf.              *|
03865 |*                                                                            *|
03866 |* Input parameters:                                                          *|
03867 |*      the_constant : address of the constant to be "converted"              *|
03868 |*      type_idx     : the data type of the constant (index into Type Table)  *|
03869 |*                                                                            *|
03870 |* Output parameters:                                                         *|
03871 |*      result       : the_constant converted to a string (also returned as   *|
03872 |*                     the result of this function)                           *|
03873 |*                                                                            *|
03874 |* Returns:                                                                   *|
03875 |*      A character string version of the_constant (in result).               *|
03876 |*                                                                            *|
03877 \******************************************************************************/
03878 
03879 char *   convert_cval_to_string (long64 *the_constant,
03880                                  int     type_idx,
03881                                  char   *result)
03882 
03883 {
03884    long_type    cn_val[MAX_WORDS_FOR_INTEGER];
03885 
03886 
03887    TRACE (Func_Entry, "convert_cval_to_string", NULL);
03888 
03889    C_TO_F_INT(cn_val, *the_constant, TYP_LINEAR(type_idx));
03890 
03891    result = convert_to_string(cn_val,
03892                               type_idx,
03893                               result);
03894 
03895    TRACE (Func_Exit, "convert_cval_to_string", NULL);
03896 
03897    return(result);
03898 
03899 }  /* convert_cval_to_string */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines