sl@0: // sl@0: // gettsc.inl sl@0: // sl@0: // gives access to the Pentium's (secret) cycle counter sl@0: // sl@0: // This software was written by Leonard Janke (janke@unixg.ubc.ca) sl@0: // in 1996-7 and is entered, by him, into the public domain. sl@0: sl@0: #if defined(__WATCOMC__) sl@0: void GetTSC(unsigned long&); sl@0: #pragma aux GetTSC = 0x0f 0x31 "mov [edi], eax" parm [edi] modify [edx eax]; sl@0: #elif defined(__GNUC__) sl@0: inline sl@0: void GetTSC(unsigned long& tsc) sl@0: { sl@0: asm volatile(".byte 15, 49\n\t" sl@0: : "=eax" (tsc) sl@0: : sl@0: : "%edx", "%eax"); sl@0: } sl@0: #elif defined(_MSC_VER) sl@0: inline sl@0: void GetTSC(unsigned long& tsc) sl@0: { sl@0: unsigned long a; sl@0: __asm _emit 0fh sl@0: __asm _emit 31h sl@0: __asm mov a, eax; sl@0: tsc=a; sl@0: } sl@0: #endif sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: void main(int argc,char *argv[]) sl@0: { sl@0: des_key_schedule key; sl@0: unsigned long s1,s2,e1,e2; sl@0: unsigned long data[2]; sl@0: int i,j; sl@0: sl@0: for (j=0; j<6; j++) sl@0: { sl@0: for (i=0; i<1000; i++) /**/ sl@0: { sl@0: des_encrypt1(&data[0],key,1); sl@0: GetTSC(s1); sl@0: des_encrypt1(&data[0],key,1); sl@0: des_encrypt1(&data[0],key,1); sl@0: des_encrypt1(&data[0],key,1); sl@0: GetTSC(e1); sl@0: GetTSC(s2); sl@0: des_encrypt1(&data[0],key,1); sl@0: des_encrypt1(&data[0],key,1); sl@0: des_encrypt1(&data[0],key,1); sl@0: des_encrypt1(&data[0],key,1); sl@0: GetTSC(e2); sl@0: des_encrypt1(&data[0],key,1); sl@0: } sl@0: sl@0: printf("des %d %d (%d)\n", sl@0: e1-s1,e2-s2,((e2-s2)-(e1-s1))); sl@0: } sl@0: } sl@0: