1:
2:
3:
4:
5:
6:
7:
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/des.h>
36:
37: void main(int argc,char *argv[])
38: {
39: des_key_schedule key;
40: 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_encrypt(&data[0],key,1);
49: GetTSC(s1);
50: des_encrypt(&data[0],key,1);
51: des_encrypt(&data[0],key,1);
52: des_encrypt(&data[0],key,1);
53: GetTSC(e1);
54: GetTSC(s2);
55: des_encrypt(&data[0],key,1);
56: des_encrypt(&data[0],key,1);
57: des_encrypt(&data[0],key,1);
58: des_encrypt(&data[0],key,1);
59: GetTSC(e2);
60: des_encrypt(&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: