00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00046 
00047 #include <benchs.h>
00048 
00049 
00050 void bench_bits (bench_t *b);
00051 void bench_shift_right_1 (bench_t *b);
00052 void bench_shift_left_1 (bench_t *b);
00053 void bench_shift_left_n (bench_t *b);
00054 void bench_char (bench_t *b);
00055 void bench_short (bench_t *b);
00056 void bench_long (bench_t *b);
00057 void bench_longlong (bench_t *b);
00058 
00059 
00060 
00061 
00062 unsigned long long global_value = -1;
00063 unsigned long long scratch;
00064 unsigned long global_shift;
00065 long l = 0x1234567;
00066 long long ll = 0x12345670000LL;
00067 short s = 0x1234;
00068 char c = 0x12;
00069 
00070 
00071 void
00072 bench_bits (bench_t *b)
00073 {
00074   unsigned short cnt;
00075   unsigned char v_char, i_char;
00076   unsigned short v_short, i_short;
00077   unsigned long v_long, i_long;
00078   unsigned long long v_longlong, i_longlong;
00079   
00080   cnt = 0;
00081   v_char = global_value;
00082   bench_start (b);
00083   for (i_char = 1 << 7; i_char; i_char >>= 1)
00084     if (v_char & i_char)
00085       cnt++;
00086   bench_stop (b);
00087   bench_report (b, "Bit count (char, %d bits set)", (long) cnt);
00088 
00089   cnt = 0;
00090   v_short = global_value;
00091   bench_start (b);
00092   for (i_short = 1 << 15; i_short; i_short >>= 1)
00093     if (v_short & i_short)
00094       cnt++;
00095   bench_stop (b);
00096   bench_report (b, "Bit count (short, %d bits set)", (long) cnt);
00097 
00098   cnt = 0;
00099   v_long = global_value;
00100   bench_start (b);
00101   for (i_long = 1L << 31; i_long; i_long >>= 1)
00102     if (v_long & i_long)
00103       cnt++;
00104   bench_stop (b);
00105   bench_report (b, "Bit count (long, %d bits set)", (long) cnt);
00106 
00107   cnt = 0;
00108   v_longlong = global_value;
00109   bench_start (b);
00110   for (i_longlong = 1LL << 63; i_longlong; i_longlong >>= 1)
00111     if (v_longlong & i_longlong)
00112       cnt++;
00113   bench_stop (b);
00114   bench_report (b, "Bit count (long long, %d bits set)", (long) cnt);
00115 }
00116 
00117 void
00118 bench_shift_right_1 (bench_t *b)
00119 {
00120   unsigned char v_char;
00121   unsigned short v_short;
00122   unsigned long v_long;
00123   unsigned long long v_longlong;
00124   
00125   v_char = global_value;
00126   bench_start (b);
00127   v_char >>= 1;
00128   bench_stop (b);
00129   bench_report (b, "Shift right 1 (char)");
00130 
00131   scratch += v_char;
00132 
00133   v_short = global_value;
00134   bench_start (b);
00135   v_short >>= 1;
00136   bench_stop (b);
00137   bench_report (b, "Shift right 1 (short)");
00138 
00139   scratch += v_short;
00140   
00141   v_long = global_value;
00142   bench_start (b);
00143   v_long >>= 1;
00144   bench_stop (b);
00145   bench_report (b, "Shift right 1 (long)");
00146 
00147   scratch += v_long;
00148   
00149   v_longlong = global_value;
00150   bench_start (b);
00151   v_longlong >>= 1;
00152   bench_stop (b);
00153   bench_report (b, "Shift right 1 (long long)");
00154 
00155   scratch += v_longlong;
00156 }
00157 
00158 void
00159 bench_shift_left_1 (bench_t *b)
00160 {
00161   unsigned char v_char;
00162   unsigned short v_short;
00163   unsigned long v_long;
00164   unsigned long long v_longlong;
00165   
00166   v_char = global_value;
00167   bench_start (b);
00168   v_char <<= 1;
00169   bench_stop (b);
00170   bench_report (b, "Shift left 1 (char)");
00171 
00172   scratch += v_char;
00173 
00174   v_short = global_value;
00175   bench_start (b);
00176   v_short <<= 1;
00177   bench_stop (b);
00178   bench_report (b, "Shift left 1 (short)");
00179 
00180   scratch += v_short;
00181   
00182   v_long = global_value;
00183   bench_start (b);
00184   v_long <<= 1;
00185   bench_stop (b);
00186   bench_report (b, "Shift left 1 (long)");
00187 
00188   scratch += v_long;
00189   
00190   v_longlong = global_value;
00191   bench_start (b);
00192   v_longlong <<= 1;
00193   bench_stop (b);
00194   bench_report (b, "Shift left 1 (long long)");
00195 
00196   scratch += v_longlong;
00197 }
00198 
00199 void
00200 bench_shift_left_n (bench_t *b)
00201 {
00202   unsigned char v_char;
00203   unsigned short v_short;
00204   unsigned long v_long;
00205   unsigned long long v_longlong;
00206   
00207   v_char = global_value;
00208   bench_start (b);
00209   v_char <<= global_shift;
00210   bench_stop (b);
00211   bench_report (b, "Shift left non-const (N=%d, char)", global_shift);
00212 
00213   scratch += v_char;
00214 
00215   v_short = global_value;
00216   bench_start (b);
00217   v_short <<= global_shift;
00218   bench_stop (b);
00219   bench_report (b, "Shift left non-const (N=%d, short)", global_shift);
00220 
00221   scratch += v_short;
00222   
00223   v_long = global_value;
00224   bench_start (b);
00225   v_long <<= global_shift;
00226   bench_stop (b);
00227   bench_report (b, "Shift left non-const (N=%d, long)", global_shift);
00228 
00229   scratch += v_long;
00230   
00231   v_longlong = global_value;
00232   bench_start (b);
00233   v_longlong <<= global_shift;
00234   bench_stop (b);
00235   bench_report (b, "Shift left non-const (N=%d, long long)", global_shift);
00236 
00237   scratch += v_longlong;
00238 }
00239 
00240 void
00241 bench_char (bench_t *b)
00242 {
00243   bench_start (b);
00244   c = c * c;
00245   bench_stop (b);
00246   bench_report (b, "Char mul (%d)", (long) c);
00247 
00248   bench_start (b);
00249   c = c + c;
00250   bench_stop (b);
00251   bench_report (b, "Char add (%d)", (long) c);
00252 
00253   bench_start (b);
00254   c = -c;
00255   bench_stop (b);
00256   bench_report (b, "Char neg (%d)", (long) c);
00257 
00258   bench_start (b);
00259   c = c / 3;
00260   bench_stop (b);
00261   bench_report (b, "Char div (%d)", (long) c);
00262 }
00263 
00264 void
00265 bench_short (bench_t *b)
00266 {
00267   bench_start (b);
00268   s = s * s;
00269   bench_stop (b);
00270   bench_report (b, "Short mul (%d)", (long) s);
00271 
00272   bench_start (b);
00273   s = s + s;
00274   bench_stop (b);
00275   bench_report (b, "Short add (%d)", (long) s);
00276 
00277   bench_start (b);
00278   s = -s;
00279   bench_stop (b);
00280   bench_report (b, "Short neg (%d)", (long) s);
00281 
00282   bench_start (b);
00283   s = s / 3;
00284   bench_stop (b);
00285   bench_report (b, "Short div (%d)", (long) s);
00286 }
00287 
00288 void
00289 bench_long (bench_t *b)
00290 {
00291   bench_start (b);
00292   l = l * l;
00293   bench_stop (b);
00294   bench_report (b, "Long mul (%d)", (long) l);
00295 
00296   bench_start (b);
00297   l = l + l;
00298   bench_stop (b);
00299   bench_report (b, "Long add (%d)", (long) l);
00300 
00301   bench_start (b);
00302   l = -l;
00303   bench_stop (b);
00304   bench_report (b, "Long neg (%d)", (long) l);
00305 
00306   bench_start (b);
00307   l = l / 3;
00308   bench_stop (b);
00309   bench_report (b, "Long div (%d)", (long) l);
00310 }
00311 
00312 void
00313 bench_longlong (bench_t *b)
00314 {
00315   bench_start (b);
00316   ll = ll * ll;
00317   bench_stop (b);
00318   bench_report (b, "Long long mul (%d)", (long) l);
00319 
00320   bench_start (b);
00321   ll = ll + ll;
00322   bench_stop (b);
00323   bench_report (b, "Long long add (%d)", (long) l);
00324 
00325   bench_start (b);
00326   ll = -ll;
00327   bench_stop (b);
00328   bench_report (b, "Long long neg (%d)", (long) l);
00329 
00330   bench_start (b);
00331   ll = ll / 3;
00332   bench_stop (b);
00333   bench_report (b, "Long long div (%d)", (long) l);
00334 }
00335 
00336 
00337 int
00338 main ()
00339 {
00340   bench_t b;
00341   
00342   bench_init (&b);
00343   bench_char (&b);
00344   bench_short (&b);
00345   bench_long (&b);
00346   bench_longlong (&b);
00347   bench_shift_right_1 (&b);
00348   bench_shift_left_1 (&b);
00349   bench_bits (&b);
00350   return 0;
00351 }
00352