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