sweetlilmre
Member
- Joined
- Jan 14, 2006
- Messages
- 92
Hi,
I have been working on the Beagleboard (as a temporary Pandora target) trying to port LinuxSampler. I've got all the OE bitbake files up and running, various patches for GCC4.3 etc. but have run into a platform specific porting issue.
The code requires a function to return a (I am assuming highly accurate) time stamp, the code is below.
Do any of the gurus around here have a suggestion on how to implement this for the Beagle / Pandora?
CODE
/*
* Creates a real time stamp for the current moment. Out of efficiency this
* is implemented in inline assembly for each CPU independently; we currently
* don't use a generic solution for CPUs that are not yet covered by the
* assembly code, instead an error message is prompted on compile time, forcing
* the user to contact us.
*/
RTMathBase::time_stamp_t RTMathBase::CreateTimeStamp() {
#if defined(__i386__) || defined(__x86_64__)
uint64_t t;
__asm__ __volatile__ ("rdtsc" : "=A" (t));
return t >> 8;
#elif defined(__ia64__)
time_stamp_t t;
__asm__ __volatile__ ("mov %0=ar.itc" : "=r"(t));
return t;
#elif defined(__powerpc__)
time_stamp_t t;
__asm__ __volatile__ (
"98: mftb %0\n"
"99:\n"
".section __ftr_fixup,\"a\"\n"
" .long %1\n"
" .long 0\n"
" .long 98b\n"
" .long 99b\n"
".previous"
: "=r" (t) : "i" (0x00000100)
);
return t;
#elif defined(__alpha__)
time_stamp_t t;
__asm__ __volatile__ ("rpcc %0" : "=r"(t));
return t;
#elif defined(__APPLE__)
return GetMachTime();
#else // we don't want to use a slow generic solution
# error "Sorry, LinuxSampler lacks time stamp code for your system."
# error "Please report this error and the CPU you are using to the LinuxSampler developers mailing list!"
#endif
}
Thanks
-(e)
I have been working on the Beagleboard (as a temporary Pandora target) trying to port LinuxSampler. I've got all the OE bitbake files up and running, various patches for GCC4.3 etc. but have run into a platform specific porting issue.
The code requires a function to return a (I am assuming highly accurate) time stamp, the code is below.
Do any of the gurus around here have a suggestion on how to implement this for the Beagle / Pandora?
CODE
/*
* Creates a real time stamp for the current moment. Out of efficiency this
* is implemented in inline assembly for each CPU independently; we currently
* don't use a generic solution for CPUs that are not yet covered by the
* assembly code, instead an error message is prompted on compile time, forcing
* the user to contact us.
*/
RTMathBase::time_stamp_t RTMathBase::CreateTimeStamp() {
#if defined(__i386__) || defined(__x86_64__)
uint64_t t;
__asm__ __volatile__ ("rdtsc" : "=A" (t));
return t >> 8;
#elif defined(__ia64__)
time_stamp_t t;
__asm__ __volatile__ ("mov %0=ar.itc" : "=r"(t));
return t;
#elif defined(__powerpc__)
time_stamp_t t;
__asm__ __volatile__ (
"98: mftb %0\n"
"99:\n"
".section __ftr_fixup,\"a\"\n"
" .long %1\n"
" .long 0\n"
" .long 98b\n"
" .long 99b\n"
".previous"
: "=r" (t) : "i" (0x00000100)
);
return t;
#elif defined(__alpha__)
time_stamp_t t;
__asm__ __volatile__ ("rpcc %0" : "=r"(t));
return t;
#elif defined(__APPLE__)
return GetMachTime();
#else // we don't want to use a slow generic solution
# error "Sorry, LinuxSampler lacks time stamp code for your system."
# error "Please report this error and the CPU you are using to the LinuxSampler developers mailing list!"
#endif
}
Thanks
-(e)