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/des.h>
3655714Skris
3755714Skrisvoid main(int argc,char *argv[])
3855714Skris	{
3955714Skris	des_key_schedule 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			{
4876866Skris			des_encrypt1(&data[0],key,1);
4955714Skris			GetTSC(s1);
5076866Skris			des_encrypt1(&data[0],key,1);
5176866Skris			des_encrypt1(&data[0],key,1);
5276866Skris			des_encrypt1(&data[0],key,1);
5355714Skris			GetTSC(e1);
5455714Skris			GetTSC(s2);
5576866Skris			des_encrypt1(&data[0],key,1);
5676866Skris			des_encrypt1(&data[0],key,1);
5776866Skris			des_encrypt1(&data[0],key,1);
5876866Skris			des_encrypt1(&data[0],key,1);
5955714Skris			GetTSC(e2);
6076866Skris			des_encrypt1(&data[0],key,1);
6155714Skris			}
6255714Skris
6355714Skris		printf("des %d %d (%d)\n",
6455714Skris			e1-s1,e2-s2,((e2-s2)-(e1-s1)));
6555714Skris		}
6655714Skris	}
6755714Skris
68