lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Sun, 05 Jun 2016 17:22:56 +0300
From:	Andy Shevchenko <andriy.shevchenko@...ux.intel.com>
To:	George Spelvin <linux@...encehorizons.net>
Cc:	bjorn@...k.no, linux-kernel@...r.kernel.org,
	matt@...eblueprint.co.uk, rv@...musvillemoes.dk
Subject: Re: [PATCH v2 1/2] lib/vsprintf.c: Simplify uuid_string()

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 <linux@...izon.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.shevchenko@...ux.intel.com>
Intel Finland Oy

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ