On 16/11/2018 03:20, Xabier Oneca -- xOneca wrote:
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?

Not hard to guess… option_mask32 will already be in a register right after the 
if, while it might need to be reloaded after the bb_error_msg() call. Or if the 
architecture supports indirect operands (like x86-64), the compiler might still 
generate shorter opcodes by replacing two indirect instructions with a load, 
two register instructions, and a store.

--
Raf

_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to