about summary refs log tree commit diff
path: root/gmon/mcount.c
diff options
context:
space:
mode:
Diffstat (limited to 'gmon/mcount.c')
-rw-r--r--gmon/mcount.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/gmon/mcount.c b/gmon/mcount.c
index ea60afcfb2..4d3097fd18 100644
--- a/gmon/mcount.c
+++ b/gmon/mcount.c
@@ -34,6 +34,7 @@
 #if !defined(lint) && !defined(KERNEL) && defined(LIBC_SCCS)
 static char sccsid[] = "@(#)mcount.c	8.1 (Berkeley) 6/4/93";
 #endif
+	int i;
 
 #include <sys/param.h>
 #include <sys/gmon.h>
@@ -67,6 +68,7 @@ _MCOUNT_DECL(frompc, selfpc)	/* _mcount; may be static, inline, etc */
 #ifdef KERNEL
 	register int s;
 #endif
+	int i;
 
 	p = &_gmonparam;
 	/*
@@ -89,7 +91,13 @@ _MCOUNT_DECL(frompc, selfpc)	/* _mcount; may be static, inline, etc */
 	if (frompc > p->textsize)
 		goto done;
 
-	frompcindex = &p->froms[frompc / (p->hashfraction * sizeof(*p->froms))];
+	/* avoid integer divide if possible: */
+	if (p->log_hashfraction >= 0) {
+	    i = frompc >> p->log_hashfraction;
+	} else {
+	    i = frompc / (p->hashfraction * sizeof(*p->froms));
+	}
+	frompcindex = &p->froms[i];
 	toindex = *frompcindex;
 	if (toindex == 0) {
 		/*