summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
997b2e4)
$(CC) $(CFLAGS) $^ $(LDFLAGS) -Wl,-Map=PicoDrive.map -o $@
pprof: pprof.c
$(CC) $(CFLAGS) $^ $(LDFLAGS) -Wl,-Map=PicoDrive.map -o $@
pprof: pprof.c
- $(CROSS)gcc -O2 -ggdb -DPPROF -DPPROF_TOOL -I../../ -I. $^ -o $@ -lrt
+ $(CROSS)gcc -O2 -ggdb -DPPROF -DPPROF_TOOL -I../../ -I. $^ -o $@
%.o : %.asm
@echo ">>>" $<
%.o : %.asm
@echo ">>>" $<
__asm__ __volatile__ ("rdtsc" : "=A" (ret));
return (unsigned int)ret;
}
__asm__ __volatile__ ("rdtsc" : "=A" (ret));
return (unsigned int)ret;
}
+#define unglitch_timer(x)
+// XXX: MMSP2 only, timer sometimes seems to return lower vals?
extern volatile unsigned long *gp2x_memregl;
#define pprof_get_one() (unsigned int)gp2x_memregl[0x0a00 >> 2]
extern volatile unsigned long *gp2x_memregl;
#define pprof_get_one() (unsigned int)gp2x_memregl[0x0a00 >> 2]
+#define unglitch_timer(di) \
+ if ((signed int)(di) < 0) di = 0
#define pprof_start(point) { \
unsigned int pp_start_##point = pprof_get_one()
#define pprof_start(point) { \
unsigned int pp_start_##point = pprof_get_one()
#define pprof_end(point) \
#define pprof_end(point) \
- pp_counters->counter[pp_##point] += pprof_get_one() - pp_start_##point; \
+ { \
+ unsigned int di = pprof_get_one() - pp_start_##point; \
+ unglitch_timer(di); \
+ pp_counters->counter[pp_##point] += di; \
+ } \
// subtract for recursive stuff
#define pprof_end_sub(point) \
// subtract for recursive stuff
#define pprof_end_sub(point) \
- pp_counters->counter[pp_##point] -= pprof_get_one() - pp_start_##point; \
+ { \
+ unsigned int di = pprof_get_one() - pp_start_##point; \
+ unglitch_timer(di); \
+ pp_counters->counter[pp_##point] -= di; \
+ } \
}
extern void pprof_init(void);
}
extern void pprof_init(void);