dess.cpp revision 76866
150479Speter//
21553Srgrimes// gettsc.inl
380029Sobrien//
480029Sobrien// gives access to the Pentium's (secret) cycle counter
580029Sobrien//
61553Srgrimes// This software was written by Leonard Janke (janke@unixg.ubc.ca)
774816Sru// in 1996-7 and is entered, by him, into the public domain.
880029Sobrien
91553Srgrimes#if defined(__WATCOMC__)
1080029Sobrienvoid GetTSC(unsigned long&);
1180029Sobrien#pragma aux GetTSC = 0x0f 0x31 "mov [edi], eax" parm [edi] modify [edx eax];
1280029Sobrien#elif defined(__GNUC__)
1380029Sobrieninline
1480029Sobrienvoid GetTSC(unsigned long& tsc)
1558904Sshin{
1680029Sobrien  asm volatile(".byte 15, 49\n\t"
1758904Sshin	       : "=eax" (tsc)
1817637Speter	       :
1917637Speter	       : "%edx", "%eax");
2017637Speter}
2180029Sobrien#elif defined(_MSC_VER)
2217637Speterinline
2358904Sshinvoid GetTSC(unsigned long& tsc)
2458804Sshin{
2558804Sshin  unsigned long a;
2658904Sshin  __asm _emit 0fh
2718584Sfenner  __asm _emit 31h
2842624Ssimokawa  __asm mov a, eax;
2942624Ssimokawa  tsc=a;
3080029Sobrien}
3142624Ssimokawa#endif
3242624Ssimokawa
3380029Sobrien#include <stdio.h>
3418584Sfenner#include <stdlib.h>
3518584Sfenner#include <openssl/des.h>
3636799Simp
3780029Sobrienvoid main(int argc,char *argv[])
3880029Sobrien	{
3918584Sfenner	des_key_schedule key;
401553Srgrimes	unsigned long s1,s2,e1,e2;
41	unsigned long data[2];
42	int i,j;
43
44	for (j=0; j<6; j++)
45		{
46		for (i=0; i<1000; i++) /**/
47			{
48			des_encrypt1(&data[0],key,1);
49			GetTSC(s1);
50			des_encrypt1(&data[0],key,1);
51			des_encrypt1(&data[0],key,1);
52			des_encrypt1(&data[0],key,1);
53			GetTSC(e1);
54			GetTSC(s2);
55			des_encrypt1(&data[0],key,1);
56			des_encrypt1(&data[0],key,1);
57			des_encrypt1(&data[0],key,1);
58			des_encrypt1(&data[0],key,1);
59			GetTSC(e2);
60			des_encrypt1(&data[0],key,1);
61			}
62
63		printf("des %d %d (%d)\n",
64			e1-s1,e2-s2,((e2-s2)-(e1-s1)));
65		}
66	}
67
68