(linenum→info "unix/slp.c:2238")

openssl/0.9.8g/times/x86/md5s.cpp

    1: //
    2: // gettsc.inl
    3: //
    4: // gives access to the Pentium's (secret) cycle counter
    5: //
    6: // This software was written by Leonard Janke (janke@unixg.ubc.ca)
    7: // in 1996-7 and is entered, by him, into the public domain.
    8: 
    9: #if defined(__WATCOMC__)
   10: void GetTSC(unsigned long&);
   11: #pragma aux GetTSC = 0x0f 0x31 "mov [edi], eax" parm [edi] modify [edx eax];
   12: #elif defined(__GNUC__)
   13: inline
   14: void GetTSC(unsigned long& tsc)
   15: {
   16:   asm volatile(".byte 15, 49\n\t"
   17:                : "=eax" (tsc)
   18:                :
   19:                : "%edx", "%eax");
   20: }
   21: #elif defined(_MSC_VER)
   22: inline
   23: void GetTSC(unsigned long& tsc)
   24: {
   25:   unsigned long a;
   26:   __asm _emit 0fh
   27:   __asm _emit 31h
   28:   __asm mov a, eax;
   29:   tsc=a;
   30: }
   31: #endif      
   32: 
   33: #include <stdio.h>
   34: #include <stdlib.h>
   35: #include <openssl/md5.h>
   36: 
   37: extern "C" {
   38: void md5_block_x86(MD5_CTX *ctx, unsigned char *buffer,int num);
   39: }
   40: 
   41: void main(int argc,char *argv[])
   42:         {
   43:         unsigned char buffer[64*256];
   44:         MD5_CTX ctx;
   45:         unsigned long s1,s2,e1,e2;
   46:         unsigned char k[16];
   47:         unsigned long data[2];
   48:         unsigned char iv[8];
   49:         int i,num=0,numm;
   50:         int j=0;
   51: 
   52:         if (argc >= 2)
   53:                 num=atoi(argv[1]);
   54: 
   55:         if (num == 0) num=16;
   56:         if (num > 250) num=16;
   57:         numm=num+2;
   58:         num*=64;
   59:         numm*=64;
   60: 
   61:         for (j=0; j<6; j++)
   62:                 {
   63:                 for (i=0; i<10; i++) /**/
   64:                         {
   65:                         md5_block_x86(&ctx,buffer,numm);
   66:                         GetTSC(s1);
   67:                         md5_block_x86(&ctx,buffer,numm);
   68:                         GetTSC(e1);
   69:                         GetTSC(s2);
   70:                         md5_block_x86(&ctx,buffer,num);
   71:                         GetTSC(e2);
   72:                         md5_block_x86(&ctx,buffer,num);
   73:                         }
   74:                 printf("md5 (%d bytes) %d %d (%.2f)\n",num,
   75:                         e1-s1,e2-s2,(double)((e1-s1)-(e2-s2))/2);
   76:                 }
   77:         }
   78: 
Syntax (Markdown)