155714Skris// 255714Skris// gettsc.inl 355714Skris// 455714Skris// gives access to the Pentium's (secret) cycle counter 555714Skris// 655714Skris// This software was written by Leonard Janke (janke@unixg.ubc.ca) 755714Skris// in 1996-7 and is entered, by him, into the public domain. 855714Skris 955714Skris#if defined(__WATCOMC__) 1055714Skrisvoid GetTSC(unsigned long&); 1155714Skris#pragma aux GetTSC = 0x0f 0x31 "mov [edi], eax" parm [edi] modify [edx eax]; 1255714Skris#elif defined(__GNUC__) 1355714Skrisinline 1455714Skrisvoid GetTSC(unsigned long& tsc) 1555714Skris{ 1655714Skris asm volatile(".byte 15, 49\n\t" 1755714Skris : "=eax" (tsc) 1855714Skris : 1955714Skris : "%edx", "%eax"); 2055714Skris} 2155714Skris#elif defined(_MSC_VER) 2255714Skrisinline 2355714Skrisvoid GetTSC(unsigned long& tsc) 2455714Skris{ 2555714Skris unsigned long a; 2655714Skris __asm _emit 0fh 2755714Skris __asm _emit 31h 2855714Skris __asm mov a, eax; 2955714Skris tsc=a; 3055714Skris} 3155714Skris#endif 3255714Skris 3355714Skris#include <stdio.h> 3455714Skris#include <stdlib.h> 3555714Skris#include <openssl/blowfish.h> 3655714Skris 3755714Skrisvoid main(int argc,char *argv[]) 3855714Skris { 3955714Skris BF_KEY key; 4055714Skris unsigned long s1,s2,e1,e2; 4155714Skris unsigned long data[2]; 4255714Skris int i,j; 4355714Skris 4455714Skris for (j=0; j<6; j++) 4555714Skris { 4655714Skris for (i=0; i<1000; i++) /**/ 4755714Skris { 4855714Skris BF_encrypt(&data[0],&key); 4955714Skris GetTSC(s1); 5055714Skris BF_encrypt(&data[0],&key); 5155714Skris BF_encrypt(&data[0],&key); 5255714Skris BF_encrypt(&data[0],&key); 5355714Skris GetTSC(e1); 5455714Skris GetTSC(s2); 5555714Skris BF_encrypt(&data[0],&key); 5655714Skris BF_encrypt(&data[0],&key); 5755714Skris BF_encrypt(&data[0],&key); 5855714Skris BF_encrypt(&data[0],&key); 5955714Skris GetTSC(e2); 6055714Skris BF_encrypt(&data[0],&key); 6155714Skris } 6255714Skris 6355714Skris printf("blowfish %d %d (%d)\n", 6455714Skris e1-s1,e2-s2,((e2-s2)-(e1-s1))); 6555714Skris } 6655714Skris } 6755714Skris 68