wget code shrink (recent change)
Denys Vlasenko
vda.linux at googlemail.com
Fri Nov 16 16:57:02 UTC 2018
On Fri, Nov 16, 2018 at 9:20 AM Xabier Oneca -- xOneca <xoneca at gmail.com> wrote:
>
> Hello,
>
> How is this actually possible to happen? I've been trying to reproduce
> it (on x86_64) without success... :/
>
> https://git.busybox.net/busybox/commit/?id=fe836d84554c007916adc1c2e5f5daae2f878947
>
> tls: code shrink
> function old new delta
> spawn_ssl_client 219 218 -1
>
> diff --git a/networking/wget.c b/networking/wget.c
> index a9a0f5f..65262e1 100644
> --- a/networking/wget.c
> +++ b/networking/wget.c
> @@ -717,8 +717,8 @@ static void spawn_ssl_client(const char *host, int
> network_fd, int flags)
> char *servername, *p;
> if (!(option_mask32 & WGET_OPT_NO_CHECK_CERT)) {
> - bb_error_msg("note: TLS certificate validation not implemented");
> option_mask32 |= WGET_OPT_NO_CHECK_CERT;
> + bb_error_msg("note: TLS certificate validation not implemented");
> }
> servername = xstrdup(host);
> --
>
> I can't see why that change would generate less asm. Out of curiosity,
> anybody cares to explain?
make networking/wget.s
movl option_mask32, %eax # option_mask32, option_mask32.23
testb $32, %ah #, option_mask32.23
jne .L13 #,
orb $32, %ah #, option_mask32.23
movl %eax, option_mask32 # option_mask32.23, option_mask32
pushl $.LC3 #
call bb_error_msg #
popl %esi #
.L13:
Now, if there's a way to code bit-level test_and_set idiom in C?
x86 has BTS insn which does it efficiently, but it's not used here
by the compiler. It could be:
btsl $13, option_mask32
jnc .L13 #,
pushl $.LC3 #
call bb_error_msg #
popl %esi #
.L13:
More information about the busybox
mailing list