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