Is this under a OS or a single execution? Are there interrupts enabled? If so, disable them for measurements. (Clock interrupt, serial port, etc.). BTW, most MIPS implementations for OS's and monitors use the count/compare for their main tick. If you set it to zero you may be stepping on someone's tick. A better method might be to read the count register and read it again at the end and do a difference - that way you preserve other's values. Other reasons for a delay: to fetch code (external mem ->cache -> cpu) and push items onto/off the stack... Theres probably more that I can't think of right now... -----Original Message----- From: Gareth [mailto:g.c.bransby-99@student.lboro.ac.uk] Sent: Friday, September 13, 2002 12:28 PM To: linux-mips@linux-mips.org Subject: Cycle counter Hi, Another question reagarding the mips malta board. I am wanting to be able to find out how many cycles a certain loop takes to execute. I understand there is a cycle counter built into the processor that I want to use for this. I have a bit of inline assembly to do the job but the results I am getting are not consistent so i think there is probably something wrong with my attempt at the inline assembly. Here is the code : void al_signal_start(void); size_t al_signal_finished(void); unsigned int GetcpuCycles(void); char str[8]; int main (void) { double x; al_signal_start(); x = al_signal_finished(); printf("GetcpuCycles says : %f \n",x); return 0; } size_t al_signal_finished(void) { return GetcpuCycles(); } void al_signal_start(void) { int zero,temp; __asm__("move $2, $zero"); __asm__("nop"); __asm__("mtc0 $2, $9" : : "r" (temp)); __asm__("nop"); __asm__("nop"); __asm__("nop"); } unsigned int GetcpuCycles(void) { int temp; __asm__(".set reorder"); __asm__("mfc0 $2, $9" : : "r" (temp)); __asm__("nop"); __asm__("nop"); __asm__("nop"); /*__asm__("jr $31" );*/ } As you can see, main just starts and stops the counter with no instructions in between. I expexcted the cycle count to be zero or close to it because of the instructions required to get the count but this is not the case. I am getting numbers like 8499. Is there just something wrong with my assembly or is there something else I am missing? Thanks for any help Gareth