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 <li...@horizon.com> > --- > 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 <andriy.shevche...@linux.intel.com> Intel Finland Oy