Rev 2023 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2023 | Rev 2033 | ||
---|---|---|---|
Line 35... | Line 35... | ||
35 | #ifndef KERN_ppc32_CYCLE_H_ |
35 | #ifndef KERN_ppc32_CYCLE_H_ |
36 | #define KERN_ppc32_CYCLE_H_ |
36 | #define KERN_ppc32_CYCLE_H_ |
37 | 37 | ||
38 | static inline uint64_t get_cycle(void) |
38 | static inline uint64_t get_cycle(void) |
39 | { |
39 | { |
- | 40 | uint32_t lower; |
|
- | 41 | uint32_t upper; |
|
- | 42 | uint32_t upper2; |
|
- | 43 | ||
- | 44 | asm volatile ( |
|
- | 45 | "1: mftbu %0\n" |
|
- | 46 | "mftb %1\n" |
|
- | 47 | "mftbu %2\n" |
|
- | 48 | "cmpw %0, %2\n" |
|
- | 49 | "bne- 1b\n" |
|
- | 50 | : "=r" (upper), |
|
- | 51 | "=r" (lower), |
|
- | 52 | "=r" (upper2) |
|
40 | return 0; |
53 | :: "cr0" |
- | 54 | ); |
|
- | 55 | ||
- | 56 | return ((uint64_t) upper << 32) + (uint64_t) lower; |
|
41 | } |
57 | } |
42 | 58 | ||
43 | #endif |
59 | #endif |
44 | 60 | ||
45 | /** @} |
61 | /** @} |