diff options
author | bde <bde@FreeBSD.org> | 2004-05-20 16:22:57 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 2004-05-20 16:22:57 +0000 |
commit | 5e189e571af1bd789a219f7a12ed73e9ec01f5d4 (patch) | |
tree | e4da04b384e6750bca2943e51c5cba9312299a9b /sys | |
parent | 36151be4c9b7001262472ef3fd5ad050c924d56e (diff) | |
download | FreeBSD-src-5e189e571af1bd789a219f7a12ed73e9ec01f5d4.zip FreeBSD-src-5e189e571af1bd789a219f7a12ed73e9ec01f5d4.tar.gz |
MFi386 (1.37: GUPROF calibration macros; only routine adjustments needed).
Diffstat (limited to 'sys')
-rw-r--r-- | sys/amd64/include/profile.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/amd64/include/profile.h b/sys/amd64/include/profile.h index 0cf12de..555e2f1 100644 --- a/sys/amd64/include/profile.h +++ b/sys/amd64/include/profile.h @@ -53,7 +53,26 @@ #define MCOUNT_DECL(s) #define MCOUNT_ENTER(s) #define MCOUNT_EXIT(s) +#ifdef __GNUC__ +#define MCOUNT_OVERHEAD(label) \ + __asm __volatile("pushq %0; call __mcount; popq %%rcx" \ + : \ + : "i" (profil) \ + : "ax", "dx", "cx", "di", "si", "r8", "r9", "memory") +#define MEXITCOUNT_OVERHEAD() \ + __asm __volatile("call .mexitcount; 1:" \ + : : \ + : "ax", "dx", "cx", "di", "si", "r8", "r9", "memory") +#define MEXITCOUNT_OVERHEAD_GETLABEL(labelp) \ + __asm __volatile("movq $1b,%0" : "=rm" (labelp)) +#elif defined(lint) +#define MCOUNT_OVERHEAD(label) +#define MEXITCOUNT_OVERHEAD() +#define MEXITCOUNT_OVERHEAD_GETLABEL() #else +#error +#endif /* __GNUC */ +#else /* !GUPROF */ #define MCOUNT_DECL(s) u_long s; #ifdef SMP extern int mcount_lock; |