/*
 * Copyright (c) 1998 The University of Utah and
 * the Computer Systems Laboratory at the University of Utah (CSL).
 *
 * This file is part of Flick, the Flexible IDL Compiler Kit.
 *
 * Flick is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * Flick is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with Flick; see the file COPYING.  If not, write to
 * the Free Software Foundation, 59 Temple Place #330, Boston, MA 02111, USA.
 */

#ifndef __TIMER_H__
#define __TIMER_H__

#define CPU_HZ 100000000

/* Routine to read the CPU timer */
static inline long long
read_cpu_time (void)
{
#if 1 /* only use on a Pentium class machine! */
  long long time;
  __asm __volatile (
		    ".byte 0x0f; .byte 0x31  # RDTSC instruction
movl %%edx, %0          # High order 32 bits
movl %%eax, %1          # Low order 32 bits"
                    : "=g" (((long *)&time)[1]), "=g" (((long *)&time)[0]) :: "eax", "edx");
  return time;
#else
  return 0;
#endif
}

#define CLEAR_TIME(name) name = 0
#define START_TIME(name) name -= read_cpu_time()
#define STOP_TIME(name) name += read_cpu_time()

extern long long timer;

#endif /* __TIMER_H__ */


syntax highlighted by Code2HTML, v. 0.9.1