From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751595AbcFEOVm (ORCPT ); Sun, 5 Jun 2016 10:21:42 -0400 Received: from mga09.intel.com ([134.134.136.24]:9978 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750926AbcFEOVk (ORCPT ); Sun, 5 Jun 2016 10:21:40 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.26,421,1459839600"; d="scan'208";a="969274163" Message-ID: <1465136576.1767.59.camel@linux.intel.com> Subject: Re: [PATCH v2 1/2] lib/vsprintf.c: Simplify uuid_string() From: Andy Shevchenko To: George Spelvin Cc: bjorn@mork.no, linux-kernel@vger.kernel.org, matt@codeblueprint.co.uk, rv@rasmusvillemoes.dk Date: Sun, 05 Jun 2016 17:22:56 +0300 In-Reply-To: <20160604051411.3635.qmail@ns.sciencehorizons.net> References: <20160604051411.3635.qmail@ns.sciencehorizons.net> Organization: Intel Finland Oy Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.20.2-2 Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, 2016-06-04 at 01:14 -0400, George Spelvin wrote: > Rather than have a second pass to upcase the buffer, just make the > hex lookup table a variable. > > Removing the conditional branch from the inner loop is also a > speedup, but since this is not hot code, the important factor > it shrinks both source and compiled forms: > > Before After Delta Percentage > x86-32 245 199 -46 -18.8% > x86-64 246 186 -60 -24.4% > arm 292 264 -28  -9.6% > thumb 220 160 -60 -27.3% > arm64 296 244 -52 -17.6% > > Signed-off-by: George Spelvin > --- >  lib/vsprintf.c | 16 ++++++++-------- >  1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/lib/vsprintf.c b/lib/vsprintf.c > index 7332a5d7..4ee07e89 100644 > --- a/lib/vsprintf.c > +++ b/lib/vsprintf.c > @@ -1316,24 +1316,24 @@ char *uuid_string(char *buf, char *end, const > u8 *addr, >   char *p = uuid; >   int i; >   const u8 *index = uuid_be_index; > - bool uc = false; > + const char *hex = hex_asc; >   > - switch (*(++fmt)) { > + switch (fmt[1]) { >   case 'L': > - uc = true; /* fall-through */ > + hex = hex_asc_upper; /* fall-through */ >   case 'l': >   index = uuid_le_index; >   break; >   case 'B': > - uc = true; > + hex = hex_asc_upper; >   break; >   } >   >   for (i = 0; i < 16; i++) { > - if (uc) > - p = hex_byte_pack_upper(p, addr[index[i]]); > - else > - p = hex_byte_pack(p, addr[index[i]]); > + u8 byte = addr[index[i]]; > + > + *p++ = hex[byte >> 4]; > + *p++ = hex[byte & 0x0f]; And what prevents you to assign hex_byte_pack()/hex_byte_pack_upper() and do one call here? >   switch (i) { >   case 3: >   case 5: -- Andy Shevchenko Intel Finland Oy