MIPS/resources/soft/perf_func/lib/time.c
Paul Pan 7b33e4213a a big update
1. add test soft
2. modify verilator (TODO: crossbar need to replace)
3. fix CP0: now CU0 is always 1
4. Controller: cacheop
5. Controller: fix TEN
6. mycpu_top fix CP0_i
7. fix AXI.sv
8. fix AXIReader.sv
9. fix AXIWriter.sv: getting the correct data and length
10. MU: fix cache writeback, fix mem data mux, fix writer address, fix read request
2022-07-29 18:25:58 +08:00

66 lines
1.2 KiB
C

#include <time.h>
unsigned long _get_count()
{
unsigned long _contval;
asm volatile(
"lui $25, 0xbfb0\n\t"
"lw %0,-0x2000($25)\n\t"
:"=r"(_contval)
:
:"$25"
);
return _contval;
}
unsigned long get_count()
{
return _get_count();
}
unsigned long get_count_my()
{
unsigned long n;
asm volatile(
"mfc0 %0, $9\n\t"
:"=r"(n)
);
return n;
}
unsigned long clock_gettime(int sel,struct timespec *tmp)
{
unsigned long n = 0;
n = _get_count();
tmp->tv_nsec = n*(NSEC_PER_USEC/CPU_COUNT_PER_US)%NSEC_PER_USEC;
tmp->tv_usec = (n/CPU_COUNT_PER_US)%USEC_PER_MSEC;
tmp->tv_msec = (n/CPU_COUNT_PER_US/USEC_PER_MSEC)%MSEC_PER_SEC;
tmp->tv_sec = n/CPU_COUNT_PER_US/NSEC_PER_SEC;
printf("clock ns=%d,sec=%d\n",tmp->tv_nsec,tmp->tv_sec);
return 0;
}
unsigned long get_clock()
{
unsigned long n=0;
n=_get_count();
return n;
}
unsigned long get_ns(void)
{
unsigned long n=0;
n = _get_count();
n=n*(NSEC_PER_USEC/CPU_COUNT_PER_US);
return n;
}
unsigned long get_us(void)
{
unsigned long n=0;
n = _get_count();
n=n/CPU_COUNT_PER_US;
return n;
}