diff options
Diffstat (limited to 'third_party/g7221/common/stl-files/count.h')
-rw-r--r-- | third_party/g7221/common/stl-files/count.h | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/third_party/g7221/common/stl-files/count.h b/third_party/g7221/common/stl-files/count.h new file mode 100644 index 00000000..5f2227ef --- /dev/null +++ b/third_party/g7221/common/stl-files/count.h @@ -0,0 +1,207 @@ +/* + =========================================================================== + COUNT.H + ~~~~~~~ + + Prototypes and definitions for counting operations + + These functions, and the ones in basop32.h, makes it possible to + measure the wMOPS of a codec. + + All functions in this file, and in basop32.h, updates a structure + so that it will be possible the see how many calls to add, mul mulAdd + ... that the code made, and estimate the wMOPS (and MIPS) for a + sertain part of code + + It is also possible to measure the wMOPS separatly for different + parts of the codec. + + This is done by creating a counter group (getCounterId) for each part + of the code that one wants a separte measure for. Before a part of + the code is executed a call to the "setCounter" function is needed to + identify which counter group to use. + + Currently there is a limit of 255 different counter groups. + + In the end of this file there is a pice of code illustration how the + functions can be used. + + History + ~~~~~~~ + 09.Aug.1999 V1.0.0 Input to UGST from ETSI AMR (count.h); + 26.Jan.2000 V1.1.0 Added counter entries for G.723.1's + L_mls(), div_l(), i_mult() [from basop32.c] + 05.Jul.2000 V1.2.0 Added counter entries for 32bit shiftless + operators L_mult0(), L_mac0(), L_msu0() + =========================================================================== +*/ +#ifndef COUNT_H +#define COUNT_H "$Id $" + +#define MAXCOUNTERS 256 + +int getCounterId(char *objectName); +/* + * Create a counter group, the "objectname" will be used when printing + * statistics for this counter group. + * + * Returns 0 if no more counter groups are available. + */ + +void setCounter(int counterId); +/* + * Defines which counter group to use, default is zero. + */ + +void Init_WMOPS_counter (void); +/* + * Initiates the current counter group. + */ + +void Reset_WMOPS_counter (void); +/* + * Resets the current counter group. + */ + +void WMOPS_output (Word16 notPrintWorstWorstCase); +/* + * Prints the statistics to the screen, if the argument if non zero + * the statistics for worst worst case will not be printed. This is typically + * done for dtx frames. + * + */ + +Word32 fwc (void); +/* + * worst worst case counter. + * + * This function calculates the worst possible case that can be reached. + * + * This is done by calling this function for each subpart of the calculations + * for a frame. This function then stores the maximum wMOPS for each part. + * + * The WMOPS_output function add together all parts and presents the sum. + */ + +void move16 (void); +void move32 (void); +void logic16 (void); +void logic32 (void); +void test (void); +/* + * The functions above increases the corresponding operation counter for + * the current counter group. + */ + +typedef struct +{ + Word32 add; /* Complexity Weight of 1 */ + Word32 sub; + Word32 abs_s; + Word32 shl; + Word32 shr; + Word32 extract_h; + Word32 extract_l; + Word32 mult; + Word32 L_mult; + Word32 negate; + Word32 round; + Word32 L_mac; + Word32 L_msu; + Word32 L_macNs; + Word32 L_msuNs; + Word32 L_add; /* Complexity Weight of 2 */ + Word32 L_sub; + Word32 L_add_c; + Word32 L_sub_c; + Word32 L_negate; + Word32 L_shl; + Word32 L_shr; + Word32 mult_r; + Word32 shr_r; + Word32 shift_r; + Word32 mac_r; + Word32 msu_r; + Word32 L_deposit_h; + Word32 L_deposit_l; + Word32 L_shr_r; /* Complexity Weight of 3 */ + Word32 L_shift_r; + Word32 L_abs; + Word32 L_sat; /* Complexity Weight of 4 */ + Word32 norm_s; /* Complexity Weight of 15 */ + Word32 div_s; /* Complexity Weight of 18 */ + Word32 norm_l; /* Complexity Weight of 30 */ + Word32 DataMove16; /* Complexity Weight of 1 */ + Word32 DataMove32; /* Complexity Weight of 2 */ + Word32 Logic16; /* Complexity Weight of 1 */ + Word32 Logic32; /* Complexity Weight of 2 */ + Word32 Test; /* Complexity Weight of 2 */ + /* Counters for G.723.1 basic operators*/ + Word32 L_mls; /* Complexity Weight of 1 */ + Word32 div_l; /* Complexity Weight of 1 */ + Word32 i_mult; /* Complexity Weight of 1 */ + Word32 L_mult0; /* Complexity Weight of 1 */ + Word32 L_mac0; /* Complexity Weight of 1 */ + Word32 L_msu0; /* Complexity Weight of 1 */ + /* Counters for G.722.1 basic operators*/ + Word32 LU_shl; /* Complexity Weight of 1 */ + Word32 LU_shr; /* Complexity Weight of 1 */ +} +BASIC_OP; + +#ifdef THISISANEXAMPLE_0123456789 +/* + ----------------------------------------------------------------------- + Example of how count.h could be used. + + In the example below it is assumed that the init_OBJECT functions + does not use any calls to counter.h or basic_op.h. If this is the + case a call to the function Reset_WMOPS_counter() must be done after + each call to init_OBJECT if these operations is not to be included + in the statistics. + ----------------------------------------------------------------------- +*/ + +int main() +{ + int spe1Id,spe2Id,cheId; + + /* initiate counters and objects */ + spe1Id=getCounterId("Spe 5k8"); + setCounter(spe1Id); + Init_WMOPS_counter (); + init_spe1(...); + + spe2Id=getCounterId("Spe 12k2"); + setCounter(spe2Id); + Init_WMOPS_counter (); + init_spe2(...); + + cheId=getCounterId("Channel encoder"); + setCounter(cheId); + Init_WMOPS_counter (); + init_che(...); + ... + + while(data) + { + test(); /* Note this call to test(); */ + if(useSpe1) + setCounter(spe1Id); + else + setCounter(spe2Id); + Reset_WMOPS_counter(); + speEncode(...); + WMOPS_output(0); /* Normal routine for displaying WMOPS info */ + + setCounter(cheId); + Reset_WMOPS_counter(); + preChannelInter(...); fwc(); /* Note the call to fwc() for each part */ + convolve(...); fwc(); /* of the channel encoder. */ + interleave(...); fwc(); + WMOPS_output(0); /* Normal routine for displaying WMOPS info */ + } +} +#endif /* Example */ + +#endif /* COUNT_H */ |