PCNT_GPU,
PCNT_SPU,
PCNT_BLIT,
+ PCNT_GTE,
PCNT_TEST,
PCNT_CNT
};
#ifdef PCNT
-static const char *pcnt_names[PCNT_CNT] = { "", "gpu", "spu", "blit", "test" };
+static const char *pcnt_names[PCNT_CNT] = { "", "gpu", "spu", "blit", "gte", "test" };
#define PCNT_FRAMES 10
}
printf("%4.1f ", fps);
+#if 0
+ static float pcounters_all[PCNT_CNT+1];
+ static int pcounter_samples;
+ pcounter_samples++;
+
+ for (i = 1; i < PCNT_CNT; i++) {
+ pcounters_all[i] += pcounters[i];
+ printf("%5.0f ", pcounters_all[i] / pcounter_samples);
+ }
+ pcounters_all[i] += rem;
+ printf("%5.0f\n", pcounters_all[i] / pcounter_samples);
+#else
for (i = 1; i < PCNT_CNT; i++)
printf("%5u ", pcounters[i]);
printf("%5u (", rem);
for (i = 1; i < PCNT_CNT; i++)
printf("%2u ", pcounters[i] * 100 / total);
printf("%2u) %u\n", rem * 100 / total, total);
-
+#endif
memset(pcounters, 0, sizeof(pcounters));
}
return val;
}
+static inline void pcnt_init(void)
+{
+#ifdef __ARM_ARCH_7A__
+ int v;
+ asm volatile("mrc p15, 0, %0, c9, c12, 0" : "=r"(v));
+ v |= 5; // master enable, ccnt reset
+ v &= ~8; // ccnt divider 0
+ asm volatile("mcr p15, 0, %0, c9, c12, 0" :: "r"(v));
+ // enable cycle counter
+ asm volatile("mcr p15, 0, %0, c9, c12, 1" :: "r"(1<<31));
+#endif
+}
+
+void pcnt_gte_start(int op);
+void pcnt_gte_end(int op);
+
#else
#define pcnt_start(id)