ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ WATCOM C 6.0 ΡΠΎΠΏΠ΅ΡΠ½ΠΈΡΠ°Π΅Ρ Ρ Microsoft C 5.0 ΠΏΠΎ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΉ ΠΊΠΎΠ΄ Π² ΡΠ΅ΡΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. Π’ΠΎ, ΡΡΠΎ WATCOM ΡΠ΅ΡΡΠ΅Ρ Π½Π° Π½Π΅ ΡΠ°ΠΌΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΠΈΠΊΠ»Π°Ρ , ΠΎΠ½ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π°Π²Π΅ΡΡΡΡΠ²Π°Π΅Ρ Π² ΠΌΠ°Π»ΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΉ. WATCOM C 6.0 Ρ ΠΎΡΠΎΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡΡ, ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΏΠΎΠ²ΡΡΠ°Π΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ Metaware High C ΠΈ Computer Innovations C86Plus Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ΅ΠΏΠ΅Π½Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, Π½ΠΎ ΠΎΡΡΡΡΠΏΠ°ΡΡ Π½Π° Π²ΡΠΎΡΠΎΠΉ ΠΏΠ»Π°Π½ ΠΏΡΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ ΡΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠΉ, ΡΠ΄Π΅Π»Π°Π½Π½ΡΡ Π² ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² ΡΠΈΡΠΌΠ°ΠΌΠΈ Datalight, Microsoft ΠΈ WATCOM.
ΠΠ΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Ρ Π²Π°ΡΠΈΠ» Π±Ρ Π½Π° ΡΡΠ½ΠΊΠ΅ ΠΎΠ±Π»Π°ΡΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² Π‘ΠΈ. ΠΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡ Π½Π° ΡΡΠ½ΠΊΠ΅ ΠΏΠΎΠ΄ΡΠ°Π»ΠΊΠΈΠ²Π°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΠΊ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ ΠΊ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π»ΡΡΡΠΈΠΌΠΈ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠ·ΡΠΊΠ° Π‘ΠΈ. Π Π±ΡΠ΄ΡΡΠ΅ΠΌ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π²ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΉ ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄.
ΠΠΠ‘Π’ΠΠΠ 1: OPTBENCH.C/* ---------------------------------------------------------- *
Β¦ Β¦
Β¦ Π‘Π΅ΡΠΈΡ ΡΠ΅ΡΡΠΎΠ² PC Tech Journal Β¦
Β¦ Π’Π΅ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π‘ΠΈ Β¦
Β¦ Β¦
Β¦ Copyright (c) 1988 Ziff-Devis Publishing Company Β¦
Β¦ Β¦
Β¦ ΠΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°-ΡΠ΅ΡΡ Π±ΡΠ»Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π° Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Β¦
Β¦ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ Β¦
Β¦ Π‘ΠΈ. ΠΠ½Π° Π½Π΅ Π²ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΠ°Π·ΡΠΌΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΈ Π½Π΅ Β¦
Β¦ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Ρ ΠΎΡΠΎΡΠΈΠΉ ΡΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Β¦
Β¦ Β¦
* ---------------------------------------------------------- */
#include <stdio.h>
#include <string.h>
#define max_vector 2
#define constant5 5
typedef unsigned char uchar;
int i, j, k, l, m;
int i2, j2, k2;
int g3, h3, i3, k3, m3;
int i4, j4;
int i5, j5, k5;
double flt_1, flt_2, flt_3, flt_4, flt_5, flt_6;
int ivector[ 3 ];
uchar ivector2[ 3 ];
short ivector4[ 6 ];
int ivector5[ 100 ];
#ifndef NO_PROTOTYPES
void dead_code( int, char * );
void unnecessary_loop( void );
void loop_jamming( int );
void loop_unrolling( int );
int jump_compression( int, int, int, int, int );
#else
void dead_code();
void unnecessary_loop();
void loop_jamming();
void loop_unrolling();
int jump_compression();
#endif
int main( argc, argv ) /* optbench */
int argc;
char **argv;
{
/* ---------------------------- *
Β¦ Π Π°Π·ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΈ ΠΊΠΎΠΏΠΈΠΉ Β¦
*------------------------------*/
j4 = 2;
if( i2 < j4 && i4 < j4 )
i2 = 2;
j4 = k5;
if( i2 < j4 && i4 < j4 )
i5 = 3;
/* ------------------------------------------ *
Β¦ Π‘Π²Π΅ΡΡΠΊΠ° ΠΊΠΎΠ½ΡΡΠ°Π½Ρ, Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π° Β¦
Β¦ ΠΈ ΠΈΠ·Π»ΠΈΡΠ½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ/ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ Β¦
* ------------------------------------------ */
i3 = 1 + 2;
flt_1 = 2.4 + 6.3;
i2 = 5;
j2 = i + 0;
k2 = i / 1;
i4 = i * 1;
i5 = i * 0;
#ifndef NO_ZERO_DIVIDE
/*
* ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ
* Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π° Π½ΡΠ»Ρ ΠΈ Π½Π΅ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄
*/
i2 = i / 0;
flt_2 = flt_1 / 0.0;
#else
printf( "This compiler handles divide-by-zero as \
an error\n");
#endif
flt_3 = 2.4 / 1.0;
flt_4 = 1.0 + 0.0000001;
flt_5 = flt_6 * 0.0;
flt_6 = flt_2 * flt_3;
/* -------------------- *
Β¦ ΠΠΈΡΠ½Π΅Π΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Β¦
* -------------------- */
k3 = 1;
k3 = 1;
/* ------------------ *
Β¦ Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ Β¦
* ------------------ */
k2 = 4 * j5;
for( i = 0; i <= 5; i++ )
ivector4[ i ] = i * 2;
/* ------------- *
Β¦ ΠΡΠΎΡΡΠΎΠΉ ΡΠΈΠΊΠ» Β¦
* ------------- */
j5 = 0;
k5 = 10000;
do {
k5 = k5 - 1;
j5 = j5 + 1;
i5 = (k5 * 3) / (j5 * constant5);
} while ( k5 > 0 );
/* -------------------------------------- *
Β¦ Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½Π΄ΡΠΊΡΠΈΠΈ ΡΠΈΠΊΠ»Π° Β¦
* -------------------------------------- */
for( i = 0; i < 100; i++ )
ivector5[ i * 2 + 3 ] = 5;
/* ----------------------- *
Β¦ ΠΠ»ΡΠ±ΠΎΠΊΠΈΠ΅ ΠΏΠΎΠ΄Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Β¦
* ----------------------- */
if( i < 10 )
j5 = i5 + i2;
else
k5 = i5 + i2;
/* ------------------------------------------------ *
Β¦ ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π°Π΄ΡΠ΅Ρ Β¦
Β¦ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ, ΡΠ°Π·ΠΌΠ½ΠΎΠΆΠ°Π΅Ρ Β¦
Β¦ ΠΊΠΎΠΏΠΈΠΈ ΠΈ ΡΠ΅Π³ΠΈΡΡΡΡ Β¦
* ------------------------------------------------ */
ivector[ 0 ] = 1; /* Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° */
ivector[ i2 ] = 2; /* Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ i2 Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΎ*/
ivector[ i2 ] = 2; /* ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² */
ivector[ 2 ] = 3; /* Π³Π΅Π½Π°ΡΠ°ΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° */
/* ----------------------------- *
Β¦ Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠΈΡ ΠΏΠΎΠ΄Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Β¦
* ----------------------------- */
if(( h3 + k3 ) < 0 || ( h3 + k3 ) > 5 )
printf("Common subexpression elimination\n");
else {
m3 = ( h3 + k3 ) / i3;
g3 = i3 + (h3 + k3);
/* -------------------------------------- *
Β¦ ΠΡΠ½Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Β¦
Β¦ (j * k) ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ½Π΅ΡΠ΅Π½ΠΎ ΠΈΠ· ΡΠΈΠΊΠ»Π° Β¦
* -------------------------------------- */
for( i4 = 0; i4 <= max_vector; i4++)
ivector2[ i4 ] = j * k;
/* ----------------------------- *
Β¦ ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Β¦
* ----------------------------- */
dead_code( 1, "This line should not be printed" );
/* ------------------------------ *
Β¦ ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Β¦
* ------------------------------ */
unnecessary_loop();
} /* ΠΠΎΠ½Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ main */
/* ------------------------------------------------------ *
Β¦ Π€ΡΠ½ΠΊΡΠΈΡ: dead_code Β¦
Β¦ ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π΅Π΄ΠΎΡΡΠΈΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π»ΠΈΡΠ½ΠΈΡ Β¦
Β¦ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠΉ. ΠΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΊΠΎΠ΄. Β¦
* ------------------------------------------------------ */
void dead_code( a, b )
int a;
char *b;
{
int idead_store;
idead_store = a;
if( 0 )
printf( "%s\n", b );
} /* ΠΠΎΠ½Π΅Ρ dead_code */
/* ---------------------------------------------------- *
Β¦ Π€ΡΠ½ΠΊΡΠΈΡ: unnecessary_loop Β¦
Β¦ Π¦ΠΈΠΊΠ» Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅Π½ΡΠΆΠ΅Π½, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Β¦
Β¦ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ. Π ΠΈΠ΄Π΅Π°Π»Π΅ Β¦
Β¦ ΡΠΈΠΊΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠ΄Π°Π»Π΅Π½. Β¦
* ---------------------------------------------------- */
void unnecessary_loop()
{
int x;
x = 0;
for( i = 0; i < 5; i++ ) /* Π¦ΠΈΠΊΠ» Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ*/
k5 = x + j5;
} /* ΠΠΎΠ½Π΅Ρ unnecessary_loop */
/* ---------------------------------------------------- *
Β¦ Π€ΡΠ½ΠΊΡΠΈΡ: loop_jamming Β¦
Β¦ ΠΠ²Π° ΡΠΈΠΊΠ»Π° Π² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ Β¦
Β¦ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ»ΠΈΡΡ Π² ΠΎΠ΄ΠΈΠ½. Β¦
* ---------------------------------------------------- */
void loop_jamming( x )
int x;
{
for( i = 0; i < 5; i++ )
k5 = x + j5 * i;
for( i = 0; i < 5; i++ )
i5 = x * k5 * i;
} /* ΠΠΎΠ½Π΅Ρ loop_jamming */
/* ------------------------------------------------------ *
Β¦ Π€ΡΠ½ΠΊΡΠΈΡ: loop_unrolling Β¦
Β¦ Π¦ΠΈΠΊΠ» Π² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π·Π°ΠΌΠ΅Π½Π΅Π½ Β¦
Β¦ ΡΡΠ΅ΠΌΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡΠΌΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Β¦
Β¦ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠΉ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ»ΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΠΎ- Β¦
Β¦ Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Β¦
Β¦ Π±Π»ΠΎΠΊΠ° ΠΏΠ°ΠΌΡΡΠΈ. Β¦
* ------------------------------------------------------ */