From: sandmann AT clio DOT rice DOT edu (Charles Sandmann) Message-Id: <10302150437.AA19004@clio.rice.edu> Subject: Re: _rdtsc proposal To: djgpp-workers AT delorie DOT com Date: Fri, 14 Feb 2003 22:37:38 -0600 (CST) In-Reply-To: <3E4B442E.6B87CC24@yahoo.com> from "CBFalconer" at Feb 13, 2003 02:07:26 AM X-Mailer: ELM [version 2.5 PL2] Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Reply-To: djgpp-workers AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: djgpp-workers AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk > What I worry about is that the instruction will slip into > something critical or other, and just lie there until someone with > a 486 (like me) tries to use it. It should be hard to access it, > and the access should only be via a routine that can protect it. > So timer resolution falls - tough. Here's my example. It returns 0 on my 386. #include #include #include #include #include /* Catch rdtsc exception and always return 0LL */ void catch_rdtsc(int val) { short *eip = (short *)__djgpp_exception_state->__eip; if(*eip == 0x310f) { __djgpp_exception_state->__eip += 2; __djgpp_exception_state->__edx = 0; /* High longword */ longjmp(__djgpp_exception_state, 0); /* EAX = 0 */ } return; } int main(void) { long long t; signal(SIGILL, catch_rdtsc); t = _rdtsc(); printf("Timer value: %lld\n",t); return 0; }