Home | History | Annotate | Download | only in dhry
      1 // SPDX-License-Identifier: GPL-2.0+
      2 /*
      3  * (C) Copyright 2015 Google, Inc
      4  *
      5  * Dhrystone is widely available in the public domain. A GPL license is
      6  * chosen for U-Boot.
      7  */
      8 
      9 /*****************************************************************************
     10  *  The BYTE UNIX Benchmarks - Release 3
     11  *          Module: dhry_2.c   SID: 3.4 5/15/91 19:30:22
     12  *
     13  *****************************************************************************
     14  * Bug reports, patches, comments, suggestions should be sent to:
     15  *
     16  *	Ben Smith, Rick Grehan or Tom Yager
     17  *	ben (at) bytepb.byte.com   rick_g (at) bytepb.byte.com   tyager (at) bytepb.byte.com
     18  *
     19  *****************************************************************************
     20  *  Modification Log:
     21  *  10/22/97 - code cleanup to remove ANSI C compiler warnings
     22  *             Andy Kahn <kahn (at) zk3.dec.com>
     23  *
     24  *  Adapted from:
     25  *
     26  *                   "DHRYSTONE" Benchmark Program
     27  *                   -----------------------------
     28  *
     29  * **** WARNING **** See warning in n.dhry_1.c
     30  *
     31  *  Version:    C, Version 2.1
     32  *
     33  *  File:       dhry_2.c (part 3 of 3)
     34  *
     35  *  Date:       May 25, 1988
     36  *
     37  *  Author:     Reinhold P. Weicker
     38  *
     39  ****************************************************************************/
     40 /* SCCSid is defined in dhry_1.c */
     41 
     42 #include <common.h>
     43 #include "dhry.h"
     44 
     45 #ifndef REG
     46 #define REG
     47         /* REG becomes defined as empty */
     48         /* i.e. no register variables   */
     49 #endif
     50 
     51 extern  int     Int_Glob;
     52 extern  char    Ch_1_Glob;
     53 
     54 void Proc_6(Enumeration, Enumeration *);
     55 void Proc_7(One_Fifty, One_Fifty, One_Fifty *);
     56 void Proc_8(Arr_1_Dim, Arr_2_Dim, int, int);
     57 Enumeration Func_1(Capital_Letter, Capital_Letter);
     58 Boolean Func_2(Str_30, Str_30);
     59 Boolean Func_3(Enumeration);
     60 
     61 void Proc_6 (Enumeration Enum_Val_Par, Enumeration *Enum_Ref_Par)
     62     /* executed once */
     63     /* Enum_Val_Par == Ident_3, Enum_Ref_Par becomes Ident_2 */
     64 {
     65   *Enum_Ref_Par = Enum_Val_Par;
     66   if (! Func_3 (Enum_Val_Par))
     67     /* then, not executed */
     68     *Enum_Ref_Par = Ident_4;
     69   switch (Enum_Val_Par)
     70   {
     71     case Ident_1:
     72       *Enum_Ref_Par = Ident_1;
     73       break;
     74     case Ident_2:
     75       if (Int_Glob > 100)
     76         /* then */
     77       *Enum_Ref_Par = Ident_1;
     78       else *Enum_Ref_Par = Ident_4;
     79       break;
     80     case Ident_3: /* executed */
     81       *Enum_Ref_Par = Ident_2;
     82       break;
     83     case Ident_4: break;
     84     case Ident_5:
     85       *Enum_Ref_Par = Ident_3;
     86       break;
     87   } /* switch */
     88 } /* Proc_6 */
     89 
     90 void Proc_7 (Int_1_Par_Val, Int_2_Par_Val, Int_Par_Ref)
     91 One_Fifty       Int_1_Par_Val;
     92 One_Fifty       Int_2_Par_Val;
     93 One_Fifty      *Int_Par_Ref;
     94 /**********************************************/
     95     /* executed three times                                      */
     96     /* first call:      Int_1_Par_Val == 2, Int_2_Par_Val == 3,  */
     97     /*                  Int_Par_Ref becomes 7                    */
     98     /* second call:     Int_1_Par_Val == 10, Int_2_Par_Val == 5, */
     99     /*                  Int_Par_Ref becomes 17                   */
    100     /* third call:      Int_1_Par_Val == 6, Int_2_Par_Val == 10, */
    101     /*                  Int_Par_Ref becomes 18                   */
    102 {
    103   One_Fifty Int_Loc;
    104 
    105   Int_Loc = Int_1_Par_Val + 2;
    106   *Int_Par_Ref = Int_2_Par_Val + Int_Loc;
    107 } /* Proc_7 */
    108 
    109 
    110 void Proc_8 (Arr_1_Par_Ref, Arr_2_Par_Ref, Int_1_Par_Val, Int_2_Par_Val)
    111 /*********************************************************************/
    112     /* executed once      */
    113     /* Int_Par_Val_1 == 3 */
    114     /* Int_Par_Val_2 == 7 */
    115 Arr_1_Dim       Arr_1_Par_Ref;
    116 Arr_2_Dim       Arr_2_Par_Ref;
    117 int             Int_1_Par_Val;
    118 int             Int_2_Par_Val;
    119 {
    120   REG One_Fifty Int_Index;
    121   REG One_Fifty Int_Loc;
    122 
    123   Int_Loc = Int_1_Par_Val + 5;
    124   Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val;
    125   Arr_1_Par_Ref [Int_Loc+1] = Arr_1_Par_Ref [Int_Loc];
    126   Arr_1_Par_Ref [Int_Loc+30] = Int_Loc;
    127   for (Int_Index = Int_Loc; Int_Index <= Int_Loc+1; ++Int_Index)
    128     Arr_2_Par_Ref [Int_Loc] [Int_Index] = Int_Loc;
    129   Arr_2_Par_Ref [Int_Loc] [Int_Loc-1] += 1;
    130   Arr_2_Par_Ref [Int_Loc+20] [Int_Loc] = Arr_1_Par_Ref [Int_Loc];
    131   Int_Glob = 5;
    132 } /* Proc_8 */
    133 
    134 
    135 Enumeration Func_1 (Capital_Letter Ch_1_Par_Val, Capital_Letter Ch_2_Par_Val)
    136 /*************************************************/
    137     /* executed three times                                         */
    138     /* first call:      Ch_1_Par_Val == 'H', Ch_2_Par_Val == 'R'    */
    139     /* second call:     Ch_1_Par_Val == 'A', Ch_2_Par_Val == 'C'    */
    140     /* third call:      Ch_1_Par_Val == 'B', Ch_2_Par_Val == 'C'    */
    141 {
    142   Capital_Letter        Ch_1_Loc;
    143   Capital_Letter        Ch_2_Loc;
    144 
    145   Ch_1_Loc = Ch_1_Par_Val;
    146   Ch_2_Loc = Ch_1_Loc;
    147   if (Ch_2_Loc != Ch_2_Par_Val)
    148     /* then, executed */
    149     return (Ident_1);
    150   else  /* not executed */
    151   {
    152     Ch_1_Glob = Ch_1_Loc;
    153     return (Ident_2);
    154    }
    155 } /* Func_1 */
    156 
    157 
    158 
    159 Boolean Func_2 (Str_1_Par_Ref, Str_2_Par_Ref)
    160 /*************************************************/
    161     /* executed once */
    162     /* Str_1_Par_Ref == "DHRYSTONE PROGRAM, 1'ST STRING" */
    163     /* Str_2_Par_Ref == "DHRYSTONE PROGRAM, 2'ND STRING" */
    164 
    165 Str_30  Str_1_Par_Ref;
    166 Str_30  Str_2_Par_Ref;
    167 {
    168   REG One_Thirty        Int_Loc;
    169       Capital_Letter    Ch_Loc;
    170 
    171   Ch_Loc = 'A';
    172   Int_Loc = 2;
    173   while (Int_Loc <= 2) /* loop body executed once */
    174     if (Func_1 (Str_1_Par_Ref[Int_Loc],
    175                 Str_2_Par_Ref[Int_Loc+1]) == Ident_1)
    176       /* then, executed */
    177     {
    178       Ch_Loc = 'A';
    179       Int_Loc += 1;
    180     } /* if, while */
    181   if (Ch_Loc >= 'W' && Ch_Loc < 'Z')
    182     /* then, not executed */
    183     Int_Loc = 7;
    184   if (Ch_Loc == 'R')
    185     /* then, not executed */
    186     return (true);
    187   else /* executed */
    188   {
    189     if (strcmp (Str_1_Par_Ref, Str_2_Par_Ref) > 0)
    190       /* then, not executed */
    191     {
    192       Int_Loc += 7;
    193       Int_Glob = Int_Loc;
    194       return (true);
    195     }
    196     else /* executed */
    197       return (false);
    198   } /* if Ch_Loc */
    199 } /* Func_2 */
    200 
    201 
    202 Boolean Func_3 (Enum_Par_Val)
    203 /***************************/
    204     /* executed once        */
    205     /* Enum_Par_Val == Ident_3 */
    206 Enumeration Enum_Par_Val;
    207 {
    208   Enumeration Enum_Loc;
    209 
    210   Enum_Loc = Enum_Par_Val;
    211   if (Enum_Loc == Ident_3)
    212     /* then, executed */
    213     return (true);
    214   else /* not executed */
    215     return (false);
    216 } /* Func_3 */
    217