optimize 16- and 32-bit moves

function                                             old     new   delta
udhcpd_main                                         1239    1257     +18
udhcp_add_simple_option                               93      92      -1
buffer_read_le_u32                                    19      18      -1
unpack_gz_stream_with_info                           526     520      -6
dnsd_main                                           1470    1463      -7
udhcp_run_script                                    1208    1186     -22
send_ACK                                             255     229     -26
arping_main                                         1661    1623     -38
send_offer                                           470     428     -42
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/8 up/down: 18/-143)          Total: -125 bytes
This commit is contained in:
Denis Vlasenko
2008-12-08 22:56:18 +00:00
parent d1a84a2880
commit efb545b9bd
13 changed files with 97 additions and 77 deletions

View File

@ -43,6 +43,8 @@ const char *ll_addr_n2a(unsigned char *addr, int alen, int type, char *buf, int
int ll_addr_a2n(unsigned char *lladdr, int len, char *arg)
{
int i;
if (strchr(arg, '.')) {
inet_prefix pfx;
if (get_addr_1(&pfx, arg, AF_INET)) {
@ -54,26 +56,24 @@ int ll_addr_a2n(unsigned char *lladdr, int len, char *arg)
}
memcpy(lladdr, pfx.data, 4);
return 4;
} else {
int i;
for (i=0; i<len; i++) {
int temp;
char *cp = strchr(arg, ':');
if (cp) {
*cp = 0;
cp++;
}
if (sscanf(arg, "%x", &temp) != 1 || (temp < 0 || temp > 255)) {
bb_error_msg("\"%s\" is invalid lladdr", arg);
return -1;
}
lladdr[i] = temp;
if (!cp) {
break;
}
arg = cp;
}
return i+1;
}
for (i = 0; i < len; i++) {
int temp;
char *cp = strchr(arg, ':');
if (cp) {
*cp = 0;
cp++;
}
if (sscanf(arg, "%x", &temp) != 1 || (temp < 0 || temp > 255)) {
bb_error_msg("\"%s\" is invalid lladdr", arg);
return -1;
}
lladdr[i] = temp;
if (!cp) {
break;
}
arg = cp;
}
return i+1;
}