linux-mips
[Top] [All Lists]

Cycle counter

To: linux-mips@linux-mips.org
Subject: Cycle counter
From: Gareth <g.c.bransby-99@student.lboro.ac.uk>
Date: Fri, 13 Sep 2002 17:28:24 +0100
Original-recipient: rfc822;linux-mips@linux-mips.org
Sender: linux-mips-bounce@linux-mips.org
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


<Prev in Thread] Current Thread [Next in Thread>