/*---------------------------------------------------------------------------* Project: OS Library File: OSSync.h Copyright (C) Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. *---------------------------------------------------------------------------*/ #ifndef __OSPERFORMANCE_MONITOR_H__ #define __OSPERFORMANCE_MONITOR_H__ #ifdef __cplusplus extern "C" { #endif #define PM_MASK_MMCR0 (1 << 0) #define PM_MASK_MMCR1 (1 << 1) #define PM_MASK_PMC1 (1 << 2) #define PM_MASK_PMC2 (1 << 3) #define PM_MASK_PMC3 (1 << 4) #define PM_MASK_PMC4 (1 << 5) #define PM_MASK_CONTROL (PM_MASK_MMCR0 | PM_MASK_MMCR1) #define PM_MASK_COUNTER (PM_MASK_PMC1 | PM_MASK_PMC2 | PM_MASK_PMC3 | PM_MASK_PMC4) #define PM_MASK_ALL ( PM_MASK_MMCR0 | PM_MASK_MMCR1 | PM_MASK_PMC1 | PM_MASK_PMC2 | PM_MASK_PMC3 | PM_MASK_PMC4) #define PM_UPMC1 937 #define PM_UPMC2 938 #define PM_MMCR0_PMC1_SHIFT 6 #define PM_MMCR0_PMC2_SHIFT 0 #define PM_PMC1_ENCODING_CYCLES (1 << PM_MMCR0_PMC1_SHIFT) #define PM_PMC2_ENCODING_INSTRUCTIONS (2 << PM_MMCR0_PMC2_SHIFT) void OSSetPerformanceMonitor(u32 pm_mask, u32 mmcr0, u32 mmcr1, u32 pmc1, u32 pmc2, u32 pmc3, u32 pmc4); #define PMStartCycleAndInstructionCount() \ OSSetPerformanceMonitor(PM_MASK_MMCR0|PM_MASK_PMC1|PM_MASK_PMC2,\ PM_PMC1_ENCODING_CYCLES|PM_PMC2_ENCODING_INSTRUCTIONS,\ 0, 0, 0, 0, 0); #define PMStopCycleAndInstructionCount() \ OSSetPerformanceMonitor(PM_MASK_MMCR0, 0, 0, 0, 0, 0, 0); #define PMResetCycleAndInstructionCount() \ OSSetPerformanceMonitor(PM_MASK_PMC1|PM_MASK_PMC2, 0, 0, 0, 0, 0, 0); #if 0 inline void PMStartCycleAndInstructionCount() { OSSetPerformanceMonitor(PM_MASK_MMCR0|PM_MASK_PMC1|PM_MASK_PMC2, PM_PMC1_ENCODING_CYCLES|PM_PMC2_ENCODING_INSTRUCTIONS, 0, 0, 0, 0, 0); } inline void PMStopCycleAndInstructionCount() { OSSetPerformanceMonitor(PM_MASK_MMCR0, 0, 0, 0, 0, 0, 0); } inline void PMResetCycleAndInstructionCount() { OSSetPerformanceMonitor(PM_MASK_PMC1|PM_MASK_PMC2, 0, 0, 0, 0, 0, 0); } #endif static inline u32 PMGetCycleCount() { return __MFSPR(PM_UPMC1); } static inline u32 PMGetInstructionCount() { return __MFSPR(PM_UPMC2); } #ifdef __cplusplus } #endif #endif // __OSPERFORMANCE_MONITOR_H__