X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=support%2Ftests%2Fdhrystone%2Fdhry.c;h=30088a2677cc20e89b31971876fe66371b3ec321;hb=91488233f70db024923b85bf35555ae090a53c87;hp=6cf80df36808ced4bd3453ad65050e50bd74bc80;hpb=5c4397798deb5012e75c2e51478df697d5946c85;p=fw%2Fsdcc diff --git a/support/tests/dhrystone/dhry.c b/support/tests/dhrystone/dhry.c index 6cf80df3..30088a26 100644 --- a/support/tests/dhrystone/dhry.c +++ b/support/tests/dhrystone/dhry.c @@ -39,25 +39,39 @@ ...!uunet!pcrat!dry2 (results only) */ +#define NOENUM 1 +#define NOSTRUCTASSIGN 1 +#define REG + #include "dhry.h" #include /** For printf */ #include + +#if defined(SDCC_ds390) +#include +#define clock() ClockTicks() +#define CLOCKS_PER_SEC 1000 +#define memcpy(d,s,l) memcpyx(d,s,l) + +#elif defined(__z80) || defined(__gbz80) +unsigned int _clock(void); + +#define clock _clock +#define CLOCKS_PER_SEC 100 + +#else /** For clock() */ #include #include - -/** Print the number of t-states this program has been executing for. - Optional :) -*/ -void _printTStates(void); +#endif /** Set to one to print more messages about expected values etc. */ #define DEBUG 0 #if DEBUG -#define DPRINTF(_a) printf _a +#define DPRINTF(_a) printf _a #else #define DPRINTF(_a) #endif @@ -74,6 +88,10 @@ int Arr_2_Glob [50] [50]; /* Used instead of malloc() */ static Rec_Type _r[2]; +void mark(void) +{ +} + void Proc_1 (REG Rec_Pointer Ptr_Val_Par); void Proc_2 (One_Fifty *Int_Par_Ref); void Proc_5 (void); @@ -100,7 +118,7 @@ int main(void) Str_30 Str_2_Loc; REG int Run_Index; REG int Number_Of_Runs; - unsigned runTime; + unsigned long runTime; printf("[dhry]\n"); @@ -112,7 +130,7 @@ int main(void) Ptr_Glob->variant.var_1.Enum_Comp = Ident_3; Ptr_Glob->variant.var_1.Int_Comp = 40; - strcpy (Ptr_Glob->variant.var_1.Str_Comp, + strcpy(Ptr_Glob->variant.var_1.Str_Comp, "DHRYSTONE PROGRAM, SOME STRING"); strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING"); @@ -124,7 +142,11 @@ int main(void) /* overflow may occur for this array element. */ /* 32766 is the highest value for a 16 bitter */ - Number_Of_Runs = 10000; +#if DEBUG + Number_Of_Runs = 1; +#else + Number_Of_Runs = 32766; +#endif runTime = clock(); @@ -132,7 +154,7 @@ int main(void) for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index) { DPRINTF(("Run_Index = %d\n", Run_Index)); if (!(Run_Index & 1023)) - printf("Loops: %u\r", Run_Index); + printf("Loops: %u\r\n", Run_Index); Proc_5(); Proc_4(); /* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */ @@ -185,9 +207,9 @@ int main(void) DPRINTF(("Int_1_Loc %d == 3, Int_2_Loc %d == 3, Int_3_Loc %d == 7\n", Int_1_Loc, Int_2_Loc, Int_3_Loc)); - Int_2_Loc = Int_2_Loc * Int_1_Loc; - Int_1_Loc = Int_2_Loc / Int_3_Loc; - Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc; + Int_2_Loc = Int_2_Loc * Int_1_Loc; /* i2 = 3 * 3 = 9 */ + Int_1_Loc = Int_2_Loc / Int_3_Loc; /* i1 = 9 / 7 = 1 */ + Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc; /* i2 = 7 * (9 - 7) - 1 */ /* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */ DPRINTF(("Int_1_Loc %d == 1, Int_2_Loc %d == 13, Int_3_Loc %d == 7\n", Int_1_Loc, Int_2_Loc, Int_3_Loc)); @@ -198,13 +220,11 @@ int main(void) DPRINTF(("Looping.\n")); } /* loop "for Run_Index" */ -#if 1 - _printTStates(); - printf("Run_Index = %d\n", Run_Index); runTime = clock() - runTime; +#if 1 printf ("Execution ends\n"); printf ("\n"); printf ("Final values of the variables used in the benchmark:\n"); @@ -219,7 +239,9 @@ int main(void) printf (" should be: %c\n", 'B'); printf ("Arr_1_Glob[8]: %d\n", Arr_1_Glob[8]); printf (" should be: %d\n", (int)7); +#if 1 printf ("Arr_2_Glob[8][7]: %d\n", Arr_2_Glob[8][7]); +#endif printf (" should be: Number_Of_Runs + 10\n"); printf ("Ptr_Glob->\n"); printf (" Ptr_Comp: %d\n", (int) Ptr_Glob->Ptr_Comp); @@ -252,16 +274,24 @@ int main(void) printf (" should be: %d\n", (int)7); printf ("Enum_Loc: %d\n", Enum_Loc); printf (" should be: %d\n", (int)1); - printf ("Str_1_Loc: %s\n", Str_1_Loc); + printf ("Str_1_Loc: %s\n", (char *)Str_1_Loc); printf (" should be: DHRYSTONE PROGRAM, 1'ST STRING\n"); - printf ("Str_2_Loc: %s\n", Str_2_Loc); + printf ("Str_2_Loc: %s\n", (char *)Str_2_Loc); printf (" should be: DHRYSTONE PROGRAM, 2'ND STRING\n"); printf ("\n"); - printf("Dhrystones/s = %u\n", Number_Of_Runs / (runTime/CLOCKS_PER_SEC)); +#endif +#if 1 + printf("Number of runs: %u. runTime: %u.\n", Number_Of_Runs, (unsigned)runTime); + mark(); + printf("Dhrystones/s = %u\n", (unsigned)((unsigned long)Number_Of_Runs / (runTime/CLOCKS_PER_SEC))); printf("MIPS = d/s/1757 = (sigh, need floats...)\n"); +#endif +#ifdef PRINT_T_STATES _printTStates(); +#endif +#if 1 + printf("Time: %lu ticks\n", runTime); #endif - printf("Time: %u ticks\n", runTime); } void Proc_1 (REG Rec_Pointer Ptr_Val_Par) @@ -272,7 +302,13 @@ void Proc_1 (REG Rec_Pointer Ptr_Val_Par) /* Local variable, initialized with Ptr_Val_Par->Ptr_Comp, */ /* corresponds to "rename" in Ada, "with" in Pascal */ - structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob); +#if !defined(SDCC_ds390) + structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob); +#else + /* I have no idea why this is necessary... */ + memcpyx((void xdata *)*Ptr_Val_Par->Ptr_Comp, (void xdata *)*Ptr_Glob, + sizeof(Rec_Type)); +#endif Ptr_Val_Par->variant.var_1.Int_Comp = 5; Next_Record->variant.var_1.Int_Comp = Ptr_Val_Par->variant.var_1.Int_Comp; @@ -533,3 +569,4 @@ Boolean Func_2 (char *Str_1_Par_Ref, char *Str_2_Par_Ref) } } /* if Ch_Loc */ } /* Func_2 */ +