1*b7c941bbSAndroid Build Coastguard Worker /* 2*b7c941bbSAndroid Build Coastguard Worker **************************************************************************** 3*b7c941bbSAndroid Build Coastguard Worker * 4*b7c941bbSAndroid Build Coastguard Worker * "DHRYSTONE" Benchmark Program 5*b7c941bbSAndroid Build Coastguard Worker * ----------------------------- 6*b7c941bbSAndroid Build Coastguard Worker * 7*b7c941bbSAndroid Build Coastguard Worker * Version: C, Version 2.1 8*b7c941bbSAndroid Build Coastguard Worker * 9*b7c941bbSAndroid Build Coastguard Worker * File: dhry.h (part 1 of 3) 10*b7c941bbSAndroid Build Coastguard Worker * 11*b7c941bbSAndroid Build Coastguard Worker * Date: May 17, 1988 12*b7c941bbSAndroid Build Coastguard Worker * 13*b7c941bbSAndroid Build Coastguard Worker * Author: Reinhold P. Weicker 14*b7c941bbSAndroid Build Coastguard Worker * Siemens AG, E STE 35 15*b7c941bbSAndroid Build Coastguard Worker * Postfach 3240 16*b7c941bbSAndroid Build Coastguard Worker * 8520 Erlangen 17*b7c941bbSAndroid Build Coastguard Worker * Germany (West) 18*b7c941bbSAndroid Build Coastguard Worker * Phone: [xxx-49]-9131-7-20330 19*b7c941bbSAndroid Build Coastguard Worker * (8-17 Central European Time) 20*b7c941bbSAndroid Build Coastguard Worker * Usenet: ..!mcvax!unido!estevax!weicker 21*b7c941bbSAndroid Build Coastguard Worker * 22*b7c941bbSAndroid Build Coastguard Worker * Original Version (in Ada) published in 23*b7c941bbSAndroid Build Coastguard Worker * "Communications of the ACM" vol. 27., no. 10 (Oct. 1984), 24*b7c941bbSAndroid Build Coastguard Worker * pp. 1013 - 1030, together with the statistics 25*b7c941bbSAndroid Build Coastguard Worker * on which the distribution of statements etc. is based. 26*b7c941bbSAndroid Build Coastguard Worker * 27*b7c941bbSAndroid Build Coastguard Worker * In this C version, the following C library functions are used: 28*b7c941bbSAndroid Build Coastguard Worker * - strcpy, strcmp (inside the measurement loop) 29*b7c941bbSAndroid Build Coastguard Worker * - printf, scanf (outside the measurement loop) 30*b7c941bbSAndroid Build Coastguard Worker * In addition, Berkeley UNIX system calls "times ()" or "time ()" 31*b7c941bbSAndroid Build Coastguard Worker * are used for execution time measurement. For measurements 32*b7c941bbSAndroid Build Coastguard Worker * on other systems, these calls have to be changed. 33*b7c941bbSAndroid Build Coastguard Worker * 34*b7c941bbSAndroid Build Coastguard Worker * Collection of Results: 35*b7c941bbSAndroid Build Coastguard Worker * Reinhold Weicker (address see above) and 36*b7c941bbSAndroid Build Coastguard Worker * 37*b7c941bbSAndroid Build Coastguard Worker * Rick Richardson 38*b7c941bbSAndroid Build Coastguard Worker * PC Research. Inc. 39*b7c941bbSAndroid Build Coastguard Worker * 94 Apple Orchard Drive 40*b7c941bbSAndroid Build Coastguard Worker * Tinton Falls, NJ 07724 41*b7c941bbSAndroid Build Coastguard Worker * Phone: (201) 389-8963 (9-17 EST) 42*b7c941bbSAndroid Build Coastguard Worker * Usenet: ...!uunet!pcrat!rick 43*b7c941bbSAndroid Build Coastguard Worker * 44*b7c941bbSAndroid Build Coastguard Worker * Please send results to Rick Richardson and/or Reinhold Weicker. 45*b7c941bbSAndroid Build Coastguard Worker * Complete information should be given on hardware and software used. 46*b7c941bbSAndroid Build Coastguard Worker * Hardware information includes: Machine type, CPU, type and size 47*b7c941bbSAndroid Build Coastguard Worker * of caches; for microprocessors: clock frequency, memory speed 48*b7c941bbSAndroid Build Coastguard Worker * (number of wait states). 49*b7c941bbSAndroid Build Coastguard Worker * Software information includes: Compiler (and runtime library) 50*b7c941bbSAndroid Build Coastguard Worker * manufacturer and version, compilation switches, OS version. 51*b7c941bbSAndroid Build Coastguard Worker * The Operating System version may give an indication about the 52*b7c941bbSAndroid Build Coastguard Worker * compiler; Dhrystone itself performs no OS calls in the measurement loop. 53*b7c941bbSAndroid Build Coastguard Worker * 54*b7c941bbSAndroid Build Coastguard Worker * The complete output generated by the program should be mailed 55*b7c941bbSAndroid Build Coastguard Worker * such that at least some checks for correctness can be made. 56*b7c941bbSAndroid Build Coastguard Worker * 57*b7c941bbSAndroid Build Coastguard Worker *************************************************************************** 58*b7c941bbSAndroid Build Coastguard Worker * 59*b7c941bbSAndroid Build Coastguard Worker * History: This version C/2.1 has been made for two reasons: 60*b7c941bbSAndroid Build Coastguard Worker * 61*b7c941bbSAndroid Build Coastguard Worker * 1) There is an obvious need for a common C version of 62*b7c941bbSAndroid Build Coastguard Worker * Dhrystone, since C is at present the most popular system 63*b7c941bbSAndroid Build Coastguard Worker * programming language for the class of processors 64*b7c941bbSAndroid Build Coastguard Worker * (microcomputers, minicomputers) where Dhrystone is used most. 65*b7c941bbSAndroid Build Coastguard Worker * There should be, as far as possible, only one C version of 66*b7c941bbSAndroid Build Coastguard Worker * Dhrystone such that results can be compared without 67*b7c941bbSAndroid Build Coastguard Worker * restrictions. In the past, the C versions distributed 68*b7c941bbSAndroid Build Coastguard Worker * by Rick Richardson (Version 1.1) and by Reinhold Weicker 69*b7c941bbSAndroid Build Coastguard Worker * had small (though not significant) differences. 70*b7c941bbSAndroid Build Coastguard Worker * 71*b7c941bbSAndroid Build Coastguard Worker * 2) As far as it is possible without changes to the Dhrystone 72*b7c941bbSAndroid Build Coastguard Worker * statistics, optimizing compilers should be prevented from 73*b7c941bbSAndroid Build Coastguard Worker * removing significant statements. 74*b7c941bbSAndroid Build Coastguard Worker * 75*b7c941bbSAndroid Build Coastguard Worker * This C version has been developed in cooperation with 76*b7c941bbSAndroid Build Coastguard Worker * Rick Richardson (Tinton Falls, NJ), it incorporates many 77*b7c941bbSAndroid Build Coastguard Worker * ideas from the "Version 1.1" distributed previously by 78*b7c941bbSAndroid Build Coastguard Worker * him over the UNIX network Usenet. 79*b7c941bbSAndroid Build Coastguard Worker * I also thank Chaim Benedelac (National Semiconductor), 80*b7c941bbSAndroid Build Coastguard Worker * David Ditzel (SUN), Earl Killian and John Mashey (MIPS), 81*b7c941bbSAndroid Build Coastguard Worker * Alan Smith and Rafael Saavedra-Barrera (UC at Berkeley) 82*b7c941bbSAndroid Build Coastguard Worker * for their help with comments on earlier versions of the 83*b7c941bbSAndroid Build Coastguard Worker * benchmark. 84*b7c941bbSAndroid Build Coastguard Worker * 85*b7c941bbSAndroid Build Coastguard Worker * Changes: In the initialization part, this version follows mostly 86*b7c941bbSAndroid Build Coastguard Worker * Rick Richardson's version distributed via Usenet, not the 87*b7c941bbSAndroid Build Coastguard Worker * version distributed earlier via floppy disk by Reinhold Weicker. 88*b7c941bbSAndroid Build Coastguard Worker * As a concession to older compilers, names have been made 89*b7c941bbSAndroid Build Coastguard Worker * unique within the first 8 characters. 90*b7c941bbSAndroid Build Coastguard Worker * Inside the measurement loop, this version follows the 91*b7c941bbSAndroid Build Coastguard Worker * version previously distributed by Reinhold Weicker. 92*b7c941bbSAndroid Build Coastguard Worker * 93*b7c941bbSAndroid Build Coastguard Worker * At several places in the benchmark, code has been added, 94*b7c941bbSAndroid Build Coastguard Worker * but within the measurement loop only in branches that 95*b7c941bbSAndroid Build Coastguard Worker * are not executed. The intention is that optimizing compilers 96*b7c941bbSAndroid Build Coastguard Worker * should be prevented from moving code out of the measurement 97*b7c941bbSAndroid Build Coastguard Worker * loop, or from removing code altogether. Since the statements 98*b7c941bbSAndroid Build Coastguard Worker * that are executed within the measurement loop have NOT been 99*b7c941bbSAndroid Build Coastguard Worker * changed, the numbers defining the "Dhrystone distribution" 100*b7c941bbSAndroid Build Coastguard Worker * (distribution of statements, operand types and locality) 101*b7c941bbSAndroid Build Coastguard Worker * still hold. Except for sophisticated optimizing compilers, 102*b7c941bbSAndroid Build Coastguard Worker * execution times for this version should be the same as 103*b7c941bbSAndroid Build Coastguard Worker * for previous versions. 104*b7c941bbSAndroid Build Coastguard Worker * 105*b7c941bbSAndroid Build Coastguard Worker * Since it has proven difficult to subtract the time for the 106*b7c941bbSAndroid Build Coastguard Worker * measurement loop overhead in a correct way, the loop check 107*b7c941bbSAndroid Build Coastguard Worker * has been made a part of the benchmark. This does have 108*b7c941bbSAndroid Build Coastguard Worker * an impact - though a very minor one - on the distribution 109*b7c941bbSAndroid Build Coastguard Worker * statistics which have been updated for this version. 110*b7c941bbSAndroid Build Coastguard Worker * 111*b7c941bbSAndroid Build Coastguard Worker * All changes within the measurement loop are described 112*b7c941bbSAndroid Build Coastguard Worker * and discussed in the companion paper "Rationale for 113*b7c941bbSAndroid Build Coastguard Worker * Dhrystone version 2". 114*b7c941bbSAndroid Build Coastguard Worker * 115*b7c941bbSAndroid Build Coastguard Worker * Because of the self-imposed limitation that the order and 116*b7c941bbSAndroid Build Coastguard Worker * distribution of the executed statements should not be 117*b7c941bbSAndroid Build Coastguard Worker * changed, there are still cases where optimizing compilers 118*b7c941bbSAndroid Build Coastguard Worker * may not generate code for some statements. To a certain 119*b7c941bbSAndroid Build Coastguard Worker * degree, this is unavoidable for small synthetic benchmarks. 120*b7c941bbSAndroid Build Coastguard Worker * Users of the benchmark are advised to check code listings 121*b7c941bbSAndroid Build Coastguard Worker * whether code is generated for all statements of Dhrystone. 122*b7c941bbSAndroid Build Coastguard Worker * 123*b7c941bbSAndroid Build Coastguard Worker * Version 2.1 is identical to version 2.0 distributed via 124*b7c941bbSAndroid Build Coastguard Worker * the UNIX network Usenet in March 1988 except that it corrects 125*b7c941bbSAndroid Build Coastguard Worker * some minor deficiencies that were found by users of version 2.0. 126*b7c941bbSAndroid Build Coastguard Worker * The following corrections have been made in the C version: 127*b7c941bbSAndroid Build Coastguard Worker * - The assignment to Number_Of_Runs was changed 128*b7c941bbSAndroid Build Coastguard Worker * - The constant Too_Small_Time was changed 129*b7c941bbSAndroid Build Coastguard Worker * - An "else" part was added to the "if" statement in Func_3; 130*b7c941bbSAndroid Build Coastguard Worker * for compensation, an "else" part was removed in Proc_3 131*b7c941bbSAndroid Build Coastguard Worker * - Shorter file names are used 132*b7c941bbSAndroid Build Coastguard Worker * 133*b7c941bbSAndroid Build Coastguard Worker *************************************************************************** 134*b7c941bbSAndroid Build Coastguard Worker * 135*b7c941bbSAndroid Build Coastguard Worker * Defines: The following "Defines" are possible: 136*b7c941bbSAndroid Build Coastguard Worker * -DREG=register (default: Not defined) 137*b7c941bbSAndroid Build Coastguard Worker * As an approximation to what an average C programmer 138*b7c941bbSAndroid Build Coastguard Worker * might do, the "register" storage class is applied 139*b7c941bbSAndroid Build Coastguard Worker * (if enabled by -DREG=register) 140*b7c941bbSAndroid Build Coastguard Worker * - for local variables, if they are used (dynamically) 141*b7c941bbSAndroid Build Coastguard Worker * five or more times 142*b7c941bbSAndroid Build Coastguard Worker * - for parameters if they are used (dynamically) 143*b7c941bbSAndroid Build Coastguard Worker * six or more times 144*b7c941bbSAndroid Build Coastguard Worker * Note that an optimal "register" strategy is 145*b7c941bbSAndroid Build Coastguard Worker * compiler-dependent, and that "register" declarations 146*b7c941bbSAndroid Build Coastguard Worker * do not necessarily lead to faster execution. 147*b7c941bbSAndroid Build Coastguard Worker * -DNOSTRUCTASSIGN (default: Not defined) 148*b7c941bbSAndroid Build Coastguard Worker * Define if the C compiler does not support 149*b7c941bbSAndroid Build Coastguard Worker * assignment of structures. 150*b7c941bbSAndroid Build Coastguard Worker * -DNOENUMS (default: Not defined) 151*b7c941bbSAndroid Build Coastguard Worker * Define if the C compiler does not support 152*b7c941bbSAndroid Build Coastguard Worker * enumeration types. 153*b7c941bbSAndroid Build Coastguard Worker * -DTIMES (default) 154*b7c941bbSAndroid Build Coastguard Worker * -DTIME 155*b7c941bbSAndroid Build Coastguard Worker * The "times" function of UNIX (returning process times) 156*b7c941bbSAndroid Build Coastguard Worker * or the "time" function (returning wallclock time) 157*b7c941bbSAndroid Build Coastguard Worker * is used for measurement. 158*b7c941bbSAndroid Build Coastguard Worker * For single user machines, "time ()" is adequate. For 159*b7c941bbSAndroid Build Coastguard Worker * multi-user machines where you cannot get single-user 160*b7c941bbSAndroid Build Coastguard Worker * access, use the "times ()" function. If you have 161*b7c941bbSAndroid Build Coastguard Worker * neither, use a stopwatch in the dead of night. 162*b7c941bbSAndroid Build Coastguard Worker * "printf"s are provided marking the points "Start Timer" 163*b7c941bbSAndroid Build Coastguard Worker * and "Stop Timer". DO NOT use the UNIX "time(1)" 164*b7c941bbSAndroid Build Coastguard Worker * command, as this will measure the total time to 165*b7c941bbSAndroid Build Coastguard Worker * run this program, which will (erroneously) include 166*b7c941bbSAndroid Build Coastguard Worker * the time to allocate storage (malloc) and to perform 167*b7c941bbSAndroid Build Coastguard Worker * the initialization. 168*b7c941bbSAndroid Build Coastguard Worker * -DHZ=nnn 169*b7c941bbSAndroid Build Coastguard Worker * In Berkeley UNIX, the function "times" returns process 170*b7c941bbSAndroid Build Coastguard Worker * time in 1/HZ seconds, with HZ = 60 for most systems. 171*b7c941bbSAndroid Build Coastguard Worker * CHECK YOUR SYSTEM DESCRIPTION BEFORE YOU JUST APPLY 172*b7c941bbSAndroid Build Coastguard Worker * A VALUE. 173*b7c941bbSAndroid Build Coastguard Worker * 174*b7c941bbSAndroid Build Coastguard Worker *************************************************************************** 175*b7c941bbSAndroid Build Coastguard Worker * 176*b7c941bbSAndroid Build Coastguard Worker * Compilation model and measurement (IMPORTANT): 177*b7c941bbSAndroid Build Coastguard Worker * 178*b7c941bbSAndroid Build Coastguard Worker * This C version of Dhrystone consists of three files: 179*b7c941bbSAndroid Build Coastguard Worker * - dhry.h (this file, containing global definitions and comments) 180*b7c941bbSAndroid Build Coastguard Worker * - dhry_1.c (containing the code corresponding to Ada package Pack_1) 181*b7c941bbSAndroid Build Coastguard Worker * - dhry_2.c (containing the code corresponding to Ada package Pack_2) 182*b7c941bbSAndroid Build Coastguard Worker * 183*b7c941bbSAndroid Build Coastguard Worker * The following "ground rules" apply for measurements: 184*b7c941bbSAndroid Build Coastguard Worker * - Separate compilation 185*b7c941bbSAndroid Build Coastguard Worker * - No procedure merging 186*b7c941bbSAndroid Build Coastguard Worker * - Otherwise, compiler optimizations are allowed but should be indicated 187*b7c941bbSAndroid Build Coastguard Worker * - Default results are those without register declarations 188*b7c941bbSAndroid Build Coastguard Worker * See the companion paper "Rationale for Dhrystone Version 2" for a more 189*b7c941bbSAndroid Build Coastguard Worker * detailed discussion of these ground rules. 190*b7c941bbSAndroid Build Coastguard Worker * 191*b7c941bbSAndroid Build Coastguard Worker * For 16-Bit processors (e.g. 80186, 80286), times for all compilation 192*b7c941bbSAndroid Build Coastguard Worker * models ("small", "medium", "large" etc.) should be given if possible, 193*b7c941bbSAndroid Build Coastguard Worker * together with a definition of these models for the compiler system used. 194*b7c941bbSAndroid Build Coastguard Worker * 195*b7c941bbSAndroid Build Coastguard Worker ************************************************************************** 196*b7c941bbSAndroid Build Coastguard Worker * 197*b7c941bbSAndroid Build Coastguard Worker * Dhrystone (C version) statistics: 198*b7c941bbSAndroid Build Coastguard Worker * 199*b7c941bbSAndroid Build Coastguard Worker * [Comment from the first distribution, updated for version 2. 200*b7c941bbSAndroid Build Coastguard Worker * Note that because of language differences, the numbers are slightly 201*b7c941bbSAndroid Build Coastguard Worker * different from the Ada version.] 202*b7c941bbSAndroid Build Coastguard Worker * 203*b7c941bbSAndroid Build Coastguard Worker * The following program contains statements of a high level programming 204*b7c941bbSAndroid Build Coastguard Worker * language (here: C) in a distribution considered representative: 205*b7c941bbSAndroid Build Coastguard Worker * 206*b7c941bbSAndroid Build Coastguard Worker * assignments 52 (51.0 %) 207*b7c941bbSAndroid Build Coastguard Worker * control statements 33 (32.4 %) 208*b7c941bbSAndroid Build Coastguard Worker * procedure, function calls 17 (16.7 %) 209*b7c941bbSAndroid Build Coastguard Worker * 210*b7c941bbSAndroid Build Coastguard Worker * 103 statements are dynamically executed. The program is balanced with 211*b7c941bbSAndroid Build Coastguard Worker * respect to the three aspects: 212*b7c941bbSAndroid Build Coastguard Worker * 213*b7c941bbSAndroid Build Coastguard Worker * - statement type 214*b7c941bbSAndroid Build Coastguard Worker * - operand type 215*b7c941bbSAndroid Build Coastguard Worker * - operand locality 216*b7c941bbSAndroid Build Coastguard Worker * operand global, local, parameter, or constant. 217*b7c941bbSAndroid Build Coastguard Worker * 218*b7c941bbSAndroid Build Coastguard Worker * The combination of these three aspects is balanced only approximately. 219*b7c941bbSAndroid Build Coastguard Worker * 220*b7c941bbSAndroid Build Coastguard Worker * 1. Statement Type: 221*b7c941bbSAndroid Build Coastguard Worker * ----------------- number 222*b7c941bbSAndroid Build Coastguard Worker * 223*b7c941bbSAndroid Build Coastguard Worker * V1 = V2 9 224*b7c941bbSAndroid Build Coastguard Worker * (incl. V1 = F(..) 225*b7c941bbSAndroid Build Coastguard Worker * V = Constant 12 226*b7c941bbSAndroid Build Coastguard Worker * Assignment, 7 227*b7c941bbSAndroid Build Coastguard Worker * with array element 228*b7c941bbSAndroid Build Coastguard Worker * Assignment, 6 229*b7c941bbSAndroid Build Coastguard Worker * with record component 230*b7c941bbSAndroid Build Coastguard Worker * -- 231*b7c941bbSAndroid Build Coastguard Worker * 34 34 232*b7c941bbSAndroid Build Coastguard Worker * 233*b7c941bbSAndroid Build Coastguard Worker * X = Y +|-|"&&"|"|" Z 5 234*b7c941bbSAndroid Build Coastguard Worker * X = Y +|-|"==" Constant 6 235*b7c941bbSAndroid Build Coastguard Worker * X = X +|- 1 3 236*b7c941bbSAndroid Build Coastguard Worker * X = Y *|/ Z 2 237*b7c941bbSAndroid Build Coastguard Worker * X = Expression, 1 238*b7c941bbSAndroid Build Coastguard Worker * two operators 239*b7c941bbSAndroid Build Coastguard Worker * X = Expression, 1 240*b7c941bbSAndroid Build Coastguard Worker * three operators 241*b7c941bbSAndroid Build Coastguard Worker * -- 242*b7c941bbSAndroid Build Coastguard Worker * 18 18 243*b7c941bbSAndroid Build Coastguard Worker * 244*b7c941bbSAndroid Build Coastguard Worker * if .... 14 245*b7c941bbSAndroid Build Coastguard Worker * with "else" 7 246*b7c941bbSAndroid Build Coastguard Worker * without "else" 7 247*b7c941bbSAndroid Build Coastguard Worker * executed 3 248*b7c941bbSAndroid Build Coastguard Worker * not executed 4 249*b7c941bbSAndroid Build Coastguard Worker * for ... 7 | counted every time 250*b7c941bbSAndroid Build Coastguard Worker * while ... 4 | the loop condition 251*b7c941bbSAndroid Build Coastguard Worker * do ... while 1 | is evaluated 252*b7c941bbSAndroid Build Coastguard Worker * switch ... 1 253*b7c941bbSAndroid Build Coastguard Worker * break 1 254*b7c941bbSAndroid Build Coastguard Worker * declaration with 1 255*b7c941bbSAndroid Build Coastguard Worker * initialization 256*b7c941bbSAndroid Build Coastguard Worker * -- 257*b7c941bbSAndroid Build Coastguard Worker * 34 34 258*b7c941bbSAndroid Build Coastguard Worker * 259*b7c941bbSAndroid Build Coastguard Worker * P (...) procedure call 11 260*b7c941bbSAndroid Build Coastguard Worker * user procedure 10 261*b7c941bbSAndroid Build Coastguard Worker * library procedure 1 262*b7c941bbSAndroid Build Coastguard Worker * X = F (...) 263*b7c941bbSAndroid Build Coastguard Worker * function call 6 264*b7c941bbSAndroid Build Coastguard Worker * user function 5 265*b7c941bbSAndroid Build Coastguard Worker * library function 1 266*b7c941bbSAndroid Build Coastguard Worker * -- 267*b7c941bbSAndroid Build Coastguard Worker * 17 17 268*b7c941bbSAndroid Build Coastguard Worker * --- 269*b7c941bbSAndroid Build Coastguard Worker * 103 270*b7c941bbSAndroid Build Coastguard Worker * 271*b7c941bbSAndroid Build Coastguard Worker * The average number of parameters in procedure or function calls 272*b7c941bbSAndroid Build Coastguard Worker * is 1.82 (not counting the function values as implicit parameters). 273*b7c941bbSAndroid Build Coastguard Worker * 274*b7c941bbSAndroid Build Coastguard Worker * 275*b7c941bbSAndroid Build Coastguard Worker * 2. Operators 276*b7c941bbSAndroid Build Coastguard Worker * ------------ 277*b7c941bbSAndroid Build Coastguard Worker * number approximate 278*b7c941bbSAndroid Build Coastguard Worker * percentage 279*b7c941bbSAndroid Build Coastguard Worker * 280*b7c941bbSAndroid Build Coastguard Worker * Arithmetic 32 50.8 281*b7c941bbSAndroid Build Coastguard Worker * 282*b7c941bbSAndroid Build Coastguard Worker * + 21 33.3 283*b7c941bbSAndroid Build Coastguard Worker * - 7 11.1 284*b7c941bbSAndroid Build Coastguard Worker * * 3 4.8 285*b7c941bbSAndroid Build Coastguard Worker * / (int div) 1 1.6 286*b7c941bbSAndroid Build Coastguard Worker * 287*b7c941bbSAndroid Build Coastguard Worker * Comparison 27 42.8 288*b7c941bbSAndroid Build Coastguard Worker * 289*b7c941bbSAndroid Build Coastguard Worker * == 9 14.3 290*b7c941bbSAndroid Build Coastguard Worker * /= 4 6.3 291*b7c941bbSAndroid Build Coastguard Worker * > 1 1.6 292*b7c941bbSAndroid Build Coastguard Worker * < 3 4.8 293*b7c941bbSAndroid Build Coastguard Worker * >= 1 1.6 294*b7c941bbSAndroid Build Coastguard Worker * <= 9 14.3 295*b7c941bbSAndroid Build Coastguard Worker * 296*b7c941bbSAndroid Build Coastguard Worker * Logic 4 6.3 297*b7c941bbSAndroid Build Coastguard Worker * 298*b7c941bbSAndroid Build Coastguard Worker * && (AND-THEN) 1 1.6 299*b7c941bbSAndroid Build Coastguard Worker * | (OR) 1 1.6 300*b7c941bbSAndroid Build Coastguard Worker * ! (NOT) 2 3.2 301*b7c941bbSAndroid Build Coastguard Worker * 302*b7c941bbSAndroid Build Coastguard Worker * -- ----- 303*b7c941bbSAndroid Build Coastguard Worker * 63 100.1 304*b7c941bbSAndroid Build Coastguard Worker * 305*b7c941bbSAndroid Build Coastguard Worker * 306*b7c941bbSAndroid Build Coastguard Worker * 3. Operand Type (counted once per operand reference): 307*b7c941bbSAndroid Build Coastguard Worker * --------------- 308*b7c941bbSAndroid Build Coastguard Worker * number approximate 309*b7c941bbSAndroid Build Coastguard Worker * percentage 310*b7c941bbSAndroid Build Coastguard Worker * 311*b7c941bbSAndroid Build Coastguard Worker * Integer 175 72.3 % 312*b7c941bbSAndroid Build Coastguard Worker * Character 45 18.6 % 313*b7c941bbSAndroid Build Coastguard Worker * Pointer 12 5.0 % 314*b7c941bbSAndroid Build Coastguard Worker * String30 6 2.5 % 315*b7c941bbSAndroid Build Coastguard Worker * Array 2 0.8 % 316*b7c941bbSAndroid Build Coastguard Worker * Record 2 0.8 % 317*b7c941bbSAndroid Build Coastguard Worker * --- ------- 318*b7c941bbSAndroid Build Coastguard Worker * 242 100.0 % 319*b7c941bbSAndroid Build Coastguard Worker * 320*b7c941bbSAndroid Build Coastguard Worker * When there is an access path leading to the final operand (e.g. a record 321*b7c941bbSAndroid Build Coastguard Worker * component), only the final data type on the access path is counted. 322*b7c941bbSAndroid Build Coastguard Worker * 323*b7c941bbSAndroid Build Coastguard Worker * 324*b7c941bbSAndroid Build Coastguard Worker * 4. Operand Locality: 325*b7c941bbSAndroid Build Coastguard Worker * ------------------- 326*b7c941bbSAndroid Build Coastguard Worker * number approximate 327*b7c941bbSAndroid Build Coastguard Worker * percentage 328*b7c941bbSAndroid Build Coastguard Worker * 329*b7c941bbSAndroid Build Coastguard Worker * local variable 114 47.1 % 330*b7c941bbSAndroid Build Coastguard Worker * global variable 22 9.1 % 331*b7c941bbSAndroid Build Coastguard Worker * parameter 45 18.6 % 332*b7c941bbSAndroid Build Coastguard Worker * value 23 9.5 % 333*b7c941bbSAndroid Build Coastguard Worker * reference 22 9.1 % 334*b7c941bbSAndroid Build Coastguard Worker * function result 6 2.5 % 335*b7c941bbSAndroid Build Coastguard Worker * constant 55 22.7 % 336*b7c941bbSAndroid Build Coastguard Worker * --- ------- 337*b7c941bbSAndroid Build Coastguard Worker * 242 100.0 % 338*b7c941bbSAndroid Build Coastguard Worker * 339*b7c941bbSAndroid Build Coastguard Worker * 340*b7c941bbSAndroid Build Coastguard Worker * The program does not compute anything meaningful, but it is syntactically 341*b7c941bbSAndroid Build Coastguard Worker * and semantically correct. All variables have a value assigned to them 342*b7c941bbSAndroid Build Coastguard Worker * before they are used as a source operand. 343*b7c941bbSAndroid Build Coastguard Worker * 344*b7c941bbSAndroid Build Coastguard Worker * There has been no explicit effort to account for the effects of a 345*b7c941bbSAndroid Build Coastguard Worker * cache, or to balance the use of long or short displacements for code or 346*b7c941bbSAndroid Build Coastguard Worker * data. 347*b7c941bbSAndroid Build Coastguard Worker * 348*b7c941bbSAndroid Build Coastguard Worker *************************************************************************** 349*b7c941bbSAndroid Build Coastguard Worker */ 350*b7c941bbSAndroid Build Coastguard Worker 351*b7c941bbSAndroid Build Coastguard Worker /* Compiler and system dependent definitions: */ 352*b7c941bbSAndroid Build Coastguard Worker 353*b7c941bbSAndroid Build Coastguard Worker #ifndef TIME 354*b7c941bbSAndroid Build Coastguard Worker #ifndef TIMES 355*b7c941bbSAndroid Build Coastguard Worker #define TIMES 356*b7c941bbSAndroid Build Coastguard Worker #endif 357*b7c941bbSAndroid Build Coastguard Worker #endif 358*b7c941bbSAndroid Build Coastguard Worker /* Use times(2) time function unless */ 359*b7c941bbSAndroid Build Coastguard Worker /* explicitly defined otherwise */ 360*b7c941bbSAndroid Build Coastguard Worker 361*b7c941bbSAndroid Build Coastguard Worker #ifdef MSC_CLOCK 362*b7c941bbSAndroid Build Coastguard Worker #undef HZ 363*b7c941bbSAndroid Build Coastguard Worker #undef TIMES 364*b7c941bbSAndroid Build Coastguard Worker #include <time.h> 365*b7c941bbSAndroid Build Coastguard Worker #define HZ CLK_TCK 366*b7c941bbSAndroid Build Coastguard Worker #endif 367*b7c941bbSAndroid Build Coastguard Worker /* Use Microsoft C hi-res clock */ 368*b7c941bbSAndroid Build Coastguard Worker 369*b7c941bbSAndroid Build Coastguard Worker #ifdef TIMES 370*b7c941bbSAndroid Build Coastguard Worker #include <sys/types.h> 371*b7c941bbSAndroid Build Coastguard Worker #include <sys/times.h> 372*b7c941bbSAndroid Build Coastguard Worker /* for "times" */ 373*b7c941bbSAndroid Build Coastguard Worker #endif 374*b7c941bbSAndroid Build Coastguard Worker 375*b7c941bbSAndroid Build Coastguard Worker #define Mic_secs_Per_Second 1000000.0 376*b7c941bbSAndroid Build Coastguard Worker /* Berkeley UNIX C returns process times in seconds/HZ */ 377*b7c941bbSAndroid Build Coastguard Worker 378*b7c941bbSAndroid Build Coastguard Worker #ifdef NOSTRUCTASSIGN 379*b7c941bbSAndroid Build Coastguard Worker #define structassign(d, s) memcpy(&(d), &(s), sizeof(d)) 380*b7c941bbSAndroid Build Coastguard Worker #else 381*b7c941bbSAndroid Build Coastguard Worker #define structassign(d, s) d = s 382*b7c941bbSAndroid Build Coastguard Worker #endif 383*b7c941bbSAndroid Build Coastguard Worker 384*b7c941bbSAndroid Build Coastguard Worker #ifdef NOENUM 385*b7c941bbSAndroid Build Coastguard Worker #define Ident_1 0 386*b7c941bbSAndroid Build Coastguard Worker #define Ident_2 1 387*b7c941bbSAndroid Build Coastguard Worker #define Ident_3 2 388*b7c941bbSAndroid Build Coastguard Worker #define Ident_4 3 389*b7c941bbSAndroid Build Coastguard Worker #define Ident_5 4 390*b7c941bbSAndroid Build Coastguard Worker typedef int Enumeration; 391*b7c941bbSAndroid Build Coastguard Worker #else 392*b7c941bbSAndroid Build Coastguard Worker typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5} 393*b7c941bbSAndroid Build Coastguard Worker Enumeration; 394*b7c941bbSAndroid Build Coastguard Worker #endif 395*b7c941bbSAndroid Build Coastguard Worker /* for boolean and enumeration types in Ada, Pascal */ 396*b7c941bbSAndroid Build Coastguard Worker 397*b7c941bbSAndroid Build Coastguard Worker /* General definitions: */ 398*b7c941bbSAndroid Build Coastguard Worker 399*b7c941bbSAndroid Build Coastguard Worker #include <stdio.h> 400*b7c941bbSAndroid Build Coastguard Worker /* for strcpy, strcmp */ 401*b7c941bbSAndroid Build Coastguard Worker 402*b7c941bbSAndroid Build Coastguard Worker #define Null 0 403*b7c941bbSAndroid Build Coastguard Worker /* Value of a Null pointer */ 404*b7c941bbSAndroid Build Coastguard Worker #define true 1 405*b7c941bbSAndroid Build Coastguard Worker #define false 0 406*b7c941bbSAndroid Build Coastguard Worker 407*b7c941bbSAndroid Build Coastguard Worker typedef int One_Thirty; 408*b7c941bbSAndroid Build Coastguard Worker typedef int One_Fifty; 409*b7c941bbSAndroid Build Coastguard Worker typedef char Capital_Letter; 410*b7c941bbSAndroid Build Coastguard Worker typedef int Boolean; 411*b7c941bbSAndroid Build Coastguard Worker typedef char Str_30 [31]; 412*b7c941bbSAndroid Build Coastguard Worker typedef int Arr_1_Dim [50]; 413*b7c941bbSAndroid Build Coastguard Worker typedef int Arr_2_Dim [50] [50]; 414*b7c941bbSAndroid Build Coastguard Worker 415*b7c941bbSAndroid Build Coastguard Worker typedef struct record 416*b7c941bbSAndroid Build Coastguard Worker { 417*b7c941bbSAndroid Build Coastguard Worker struct record *Ptr_Comp; 418*b7c941bbSAndroid Build Coastguard Worker Enumeration Discr; 419*b7c941bbSAndroid Build Coastguard Worker union { 420*b7c941bbSAndroid Build Coastguard Worker struct { 421*b7c941bbSAndroid Build Coastguard Worker Enumeration Enum_Comp; 422*b7c941bbSAndroid Build Coastguard Worker int Int_Comp; 423*b7c941bbSAndroid Build Coastguard Worker char Str_Comp [31]; 424*b7c941bbSAndroid Build Coastguard Worker } var_1; 425*b7c941bbSAndroid Build Coastguard Worker struct { 426*b7c941bbSAndroid Build Coastguard Worker Enumeration E_Comp_2; 427*b7c941bbSAndroid Build Coastguard Worker char Str_2_Comp [31]; 428*b7c941bbSAndroid Build Coastguard Worker } var_2; 429*b7c941bbSAndroid Build Coastguard Worker struct { 430*b7c941bbSAndroid Build Coastguard Worker char Ch_1_Comp; 431*b7c941bbSAndroid Build Coastguard Worker char Ch_2_Comp; 432*b7c941bbSAndroid Build Coastguard Worker } var_3; 433*b7c941bbSAndroid Build Coastguard Worker } variant; 434*b7c941bbSAndroid Build Coastguard Worker } Rec_Type, *Rec_Pointer; 435*b7c941bbSAndroid Build Coastguard Worker 436*b7c941bbSAndroid Build Coastguard Worker 437