source: trunk/Softwares/Global.or32/src/c/service_clock.c @ 81

Last change on this file since 81 was 81, checked in by rosiere, 16 years ago
  • Finish Environment (and test)
  • Continue predictor_unit
  • Add external tools
  • svn keyword "Id" set
  • Property svn:keywords set to Id
File size: 663 bytes
Line 
1#include <time.h>
2#include <errno.h>
3#include <sys/lock.h>
4#include "mapping_memory.h"
5#include "sim2os.h"
6#include "service_clock.h"
7
8unsigned int service_clock ()
9{
10  unsigned int * addr   = (unsigned int *)(SIM2OS_BASE);
11  unsigned int   result = -1;
12
13  __lock_init    (service_lock);
14 
15  __lock_acquire (service_lock);
16
17  *(addr+0) = (unsigned int)SERVICE_CLOCK;
18 
19  // memory synchronisation
20  // (else read (with an address that depend not of store address) can be lunch before a store)
21  asm("l.msync;");
22
23  result    = (clock_t) *(addr+1);
24 
25  if (result == (clock_t)-1)
26    errno = (int) *(addr+2);
27
28  __lock_release (service_lock);
29
30  return result;
31}
Note: See TracBrowser for help on using the repository browser.