-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
8634b1a
commit 29b395b
Showing
1 changed file
with
140 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,140 @@ | ||
/* | ||
This program is part of the TACLeBench benchmark suite. | ||
Version V 2.0 | ||
Name: countnegative | ||
Author: unknown | ||
Function: Counts negative and non-negative numbers in a | ||
matrix. Features nested loops, well-structured code. | ||
Source: MRTC | ||
http://www.mrtc.mdh.se/projects/wcet/wcet_bench/cnt/cnt.c | ||
Changes: Changed split between initialization and computation | ||
License: May be used, modified, and re-distributed freely | ||
*/ | ||
|
||
/* | ||
The dimension of the matrix | ||
*/ | ||
#define MAXSIZE 20 | ||
|
||
/* | ||
Type definition for the matrix | ||
*/ | ||
typedef int matrix [ MAXSIZE ][ MAXSIZE ]; | ||
|
||
/* | ||
Forward declaration of functions | ||
*/ | ||
void countnegative_initSeed( void ); | ||
int countnegative_randomInteger( void ); | ||
void countnegative_initialize( matrix ); | ||
void countnegative_init( void ); | ||
int countnegative_return( void ); | ||
void countnegative_sum( matrix ); | ||
void countnegative_main( void ); | ||
int main( void ); | ||
|
||
/* | ||
Globals | ||
*/ | ||
volatile int countnegative_seed; | ||
matrix countnegative_array; | ||
int countnegative_postotal, countnegative_negtotal; | ||
int countnegative_poscnt, countnegative_negcnt; | ||
|
||
/* | ||
Initializes the seed used in the random number generator. | ||
*/ | ||
void countnegative_initSeed ( void ) | ||
{ | ||
countnegative_seed = 0; | ||
} | ||
|
||
/* | ||
Generates random integers between 0 and 8094 | ||
*/ | ||
int countnegative_randomInteger( void ) | ||
{ | ||
countnegative_seed = ( ( countnegative_seed * 133 ) + 81 ) % 8095; | ||
return countnegative_seed; | ||
} | ||
|
||
/* | ||
Initializes the given array with random integers. | ||
*/ | ||
void countnegative_initialize( matrix Array ) | ||
{ | ||
register int OuterIndex, InnerIndex; | ||
|
||
_Pragma( "loopbound min 20 max 20" ) | ||
for ( OuterIndex = 0; OuterIndex < MAXSIZE; OuterIndex++ ) | ||
_Pragma( "loopbound min 20 max 20" ) | ||
for ( InnerIndex = 0; InnerIndex < MAXSIZE; InnerIndex++ ) | ||
Array[ OuterIndex ][ InnerIndex ] = countnegative_randomInteger(); | ||
} | ||
|
||
void countnegative_init( void ) | ||
{ | ||
countnegative_initSeed(); | ||
countnegative_initialize( countnegative_array ); | ||
} | ||
|
||
int countnegative_return( void ) | ||
{ | ||
int checksum = ( countnegative_postotal + | ||
countnegative_poscnt + | ||
countnegative_negtotal + | ||
countnegative_negcnt ); | ||
|
||
return ( ( checksum == ( int )0x1778de ) ? 0 : -1 ); | ||
} | ||
|
||
void countnegative_sum( matrix Array ) | ||
{ | ||
register int Outer, Inner; | ||
|
||
int Ptotal = 0; /* changed these to locals in order to drive worst case */ | ||
int Ntotal = 0; | ||
int Pcnt = 0; | ||
int Ncnt = 0; | ||
|
||
_Pragma( "loopbound min 20 max 20" ) | ||
for ( Outer = 0; Outer < MAXSIZE; Outer++ ) | ||
_Pragma( "loopbound min 20 max 20" ) | ||
for ( Inner = 0; Inner < MAXSIZE; Inner++ ) | ||
if ( Array[ Outer ][ Inner ] >= 0 ) { | ||
Ptotal += Array[ Outer ][ Inner ]; | ||
Pcnt++; | ||
} else { | ||
Ntotal += Array[ Outer ][ Inner ]; | ||
Ncnt++; | ||
} | ||
|
||
countnegative_postotal = Ptotal; | ||
countnegative_poscnt = Pcnt; | ||
countnegative_negtotal = Ntotal; | ||
countnegative_negcnt = Ncnt; | ||
} | ||
|
||
/* | ||
The main function | ||
*/ | ||
void _Pragma( "entrypoint" ) countnegative_main ( void ) | ||
{ | ||
countnegative_sum( countnegative_array ); | ||
} | ||
|
||
int main( void ) | ||
{ | ||
countnegative_init(); | ||
countnegative_main(); | ||
|
||
return ( countnegative_return() ); | ||
} |