summaryrefslogtreecommitdiffstats
path: root/sys/amd64/include/profile.h
diff options
context:
space:
mode:
authorbde <bde@FreeBSD.org>2004-05-20 16:22:57 +0000
committerbde <bde@FreeBSD.org>2004-05-20 16:22:57 +0000
commit5e189e571af1bd789a219f7a12ed73e9ec01f5d4 (patch)
treee4da04b384e6750bca2943e51c5cba9312299a9b /sys/amd64/include/profile.h
parent36151be4c9b7001262472ef3fd5ad050c924d56e (diff)
downloadFreeBSD-src-5e189e571af1bd789a219f7a12ed73e9ec01f5d4.zip
FreeBSD-src-5e189e571af1bd789a219f7a12ed73e9ec01f5d4.tar.gz
MFi386 (1.37: GUPROF calibration macros; only routine adjustments needed).
Diffstat (limited to 'sys/amd64/include/profile.h')
-rw-r--r--sys/amd64/include/profile.h19
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;
OpenPOWER on IntegriCloud