Files
Mulberry/include/sce/libpc.h
T
2026-07-12 15:06:31 -05:00

62 lines
2.3 KiB
C

#ifndef SCE_LIBPC_H
#define SCE_LIBPC_H
static inline int scePcGetCounter0(void) {
register int ctr0;
__asm__ volatile ("mfpc %0, 0": "=r" (ctr0));
return ctr0;
}
#define SCE_PC0_RESERVED (0 << 5)
#define SCE_PC0_CPU_CYCLE (1 << 5)
#define SCE_PC0_SINGLE_ISSUE (2 << 5)
#define SCE_PC0_BRANCH_ISSUED (3 << 5)
#define SCE_PC0_BTAC_MISS (4 << 5)
#define SCE_PC0_ITLB_MISS (5 << 5)
#define SCE_PC0_ICACHE_MISS (6 << 5)
#define SCE_PC0_DTLB_ACCESSED (7 << 5)
#define SCE_PC0_NONBLOCK_LOAD (8 << 5)
#define SCE_PC0_WBB_SINGLE_REQ (9 << 5)
#define SCE_PC0_WBB_BURST_REQ (10 << 5)
#define SCE_PC0_ADDR_BUS_BUSY (11 << 5)
#define SCE_PC0_INST_COMP (12 << 5)
#define SCE_PC0_NON_BDS_COMP (13 << 5)
#define SCE_PC0_COP2_COMP (14 << 5)
#define SCE_PC0_LOAD_COMP (15 << 5)
#define SCE_PC0_NO_EVENT (16 << 5)
#define SCE_PC1_LOW_BRANCH_ISSUED (0 << 15)
#define SCE_PC1_CPU_CYCLE (1 << 15)
#define SCE_PC1_DUAL_ISSUE (2 << 15)
#define SCE_PC1_BRANCH_MISS_PREDICT (3 << 15)
#define SCE_PC1_TLB_MISS (4 << 15)
#define SCE_PC1_DTLB_MISS (5 << 15)
#define SCE_PC1_DCACHE_MISS (6 << 15)
#define SCE_PC1_WBB_SINGLE_UNAVAIL (7 << 15)
#define SCE_PC1_WBB_BURST_UNAVAIL (8 << 15)
#define SCE_PC1_WBB_BURST_ALMOST (9 << 15)
#define SCE_PC1_WBB_BURST_FULL (10 << 15)
#define SCE_PC1_DATA_BUS_BUSY (11 << 15)
#define SCE_PC1_INST_COMP (12 << 15)
#define SCE_PC1_NON_BDS_COMP (13 << 15)
#define SCE_PC1_COP1_COMP (14 << 15)
#define SCE_PC1_STORE_COMP (15 << 15)
#define SCE_PC1_NO_EVENT (16 << 15)
#define SCE_PC_EXL0 (1 << 1)
#define SCE_PC_K0 (1 << 2)
#define SCE_PC_S0 (1 << 3)
#define SCE_PC_U0 (1 << 4)
#define SCE_PC_EVENT0 (31 << 5)
#define SCE_PC_EXL1 (1 << 11)
#define SCE_PC_K1 (1 << 12)
#define SCE_PC_S1 (1 << 13)
#define SCE_PC_U1 (1 << 14)
#define SCE_PC_EVENT1 (31 << 15)
#define SCE_PC_CTE (1 << 31)
void scePcStart(int control, int counter0, int counter1);
void scePcStop();
#endif // SCE_LIBPC_H