eal/ppc64: use glibc for cpu cycles count
__ppc_get_timebase() reads and returns the current value of the Time Base Register. It's more efficient as it uses the processor’s time base facility directly. DPDK on FreeBSD currently is not supported on Powerpc64, it should be safe to include the sys/platform/ppc.h. Signed-off-by: Thinh Tran <thinhtr@linux.vnet.ibm.com> Reviewed-by: David Christensen <drc@linux.vnet.ibm.com>
This commit is contained in:
parent
4a5a867844
commit
56b27c4b36
@ -10,6 +10,8 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <sys/platform/ppc.h>
|
||||||
|
|
||||||
#include "generic/rte_cycles.h"
|
#include "generic/rte_cycles.h"
|
||||||
|
|
||||||
#include <rte_byteorder.h>
|
#include <rte_byteorder.h>
|
||||||
@ -24,32 +26,7 @@ extern "C" {
|
|||||||
static inline uint64_t
|
static inline uint64_t
|
||||||
rte_rdtsc(void)
|
rte_rdtsc(void)
|
||||||
{
|
{
|
||||||
union {
|
return __ppc_get_timebase();
|
||||||
uint64_t tsc_64;
|
|
||||||
RTE_STD_C11
|
|
||||||
struct {
|
|
||||||
#if RTE_BYTE_ORDER == RTE_BIG_ENDIAN
|
|
||||||
uint32_t hi_32;
|
|
||||||
uint32_t lo_32;
|
|
||||||
#else
|
|
||||||
uint32_t lo_32;
|
|
||||||
uint32_t hi_32;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
} tsc;
|
|
||||||
uint32_t tmp;
|
|
||||||
|
|
||||||
asm volatile(
|
|
||||||
"0:\n"
|
|
||||||
"mftbu %[hi32]\n"
|
|
||||||
"mftb %[lo32]\n"
|
|
||||||
"mftbu %[tmp]\n"
|
|
||||||
"cmpw %[tmp],%[hi32]\n"
|
|
||||||
"bne 0b\n"
|
|
||||||
: [hi32] "=r"(tsc.hi_32), [lo32] "=r"(tsc.lo_32),
|
|
||||||
[tmp] "=r"(tmp)
|
|
||||||
);
|
|
||||||
return tsc.tsc_64;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint64_t
|
static inline uint64_t
|
||||||
|
Loading…
x
Reference in New Issue
Block a user