From owner-svn-src-user@FreeBSD.ORG  Mon Nov 30 18:48:08 2009
Return-Path: <owner-svn-src-user@FreeBSD.ORG>
Delivered-To: svn-src-user@freebsd.org
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 3D9591065676;
	Mon, 30 Nov 2009 18:48:08 +0000 (UTC) (envelope-from ed@FreeBSD.org)
Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
	by mx1.freebsd.org (Postfix) with ESMTP id 2F5938FC14;
	Mon, 30 Nov 2009 18:48:08 +0000 (UTC)
Received: from svn.freebsd.org (localhost [127.0.0.1])
	by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id nAUIm7Np037657;
	Mon, 30 Nov 2009 18:48:07 GMT (envelope-from ed@svn.freebsd.org)
Received: (from ed@localhost)
	by svn.freebsd.org (8.14.3/8.14.3/Submit) id nAUIm77V037655;
	Mon, 30 Nov 2009 18:48:07 GMT (envelope-from ed@svn.freebsd.org)
Message-Id: <200911301848.nAUIm77V037655@svn.freebsd.org>
From: Ed Schouten <ed@FreeBSD.org>
Date: Mon, 30 Nov 2009 18:48:07 +0000 (UTC)
To: src-committers@freebsd.org, svn-src-user@freebsd.org
X-SVN-Group: user
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Cc: 
Subject: svn commit: r199971 - user/ed/newcons/sys/dev/vt
X-BeenThere: svn-src-user@freebsd.org
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: "SVN commit messages for the experimental &quot; user&quot;
	src tree" <svn-src-user.freebsd.org>
List-Unsubscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=unsubscribe>
List-Archive: <http://lists.freebsd.org/pipermail/svn-src-user>
List-Post: <mailto:svn-src-user@freebsd.org>
List-Help: <mailto:svn-src-user-request@freebsd.org?subject=help>
List-Subscribe: <http://lists.freebsd.org/mailman/listinfo/svn-src-user>,
	<mailto:svn-src-user-request@freebsd.org?subject=subscribe>
X-List-Received-Date: Mon, 30 Nov 2009 18:48:08 -0000

Author: ed
Date: Mon Nov 30 18:48:07 2009
New Revision: 199971
URL: http://svn.freebsd.org/changeset/base/199971

Log:
  Optimize vtfont_bisearch() for the common case (ASCII).
  
  More than 90% of the time we'll probably just display ASCII characters.
  In almost all cases this is stored in entry 0 of the map, so validate
  the first map by hand.

Modified:
  user/ed/newcons/sys/dev/vt/vt_font.c

Modified: user/ed/newcons/sys/dev/vt/vt_font.c
==============================================================================
--- user/ed/newcons/sys/dev/vt/vt_font.c	Mon Nov 30 18:26:46 2009	(r199970)
+++ user/ed/newcons/sys/dev/vt/vt_font.c	Mon Nov 30 18:48:07 2009	(r199971)
@@ -53,10 +53,20 @@ vtfont_bisearch(const struct vt_font_map
 	min = 0;
 	max = len - 1;
 
-	if (len == 0 || src < map[0].vfm_src ||
-	    src > map[max].vfm_src + map[max].vfm_len)
+	/* Empty font map. */
+	if (len == 0)
+		return (0);
+	/* Character below minimal entry. */
+	if (src < map[0].vfm_src)
+		return (0);
+	/* Optimization: ASCII characters occur very often. */
+	if (src <= map[0].vfm_src + map[0].vfm_len)
+		return (src - map[0].vfm_src + map[0].vfm_dst);
+	/* Character above maximum entry. */
+	if (src > map[max].vfm_src + map[max].vfm_len)
 		return (0);
 
+	/* Binary search. */
 	while (max >= min) {
 		mid = (min + max) / 2;
 		if (src < map[mid].vfm_src)