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

diff --git a/archival/libunarchive/decompress_unzip.c b/archival/libunarchive/decompress_unzip.c
index e83cd4f..8696925 100644
--- a/archival/libunarchive/decompress_unzip.c
+++ b/archival/libunarchive/decompress_unzip.c
@@ -1083,8 +1083,7 @@
 {
 	uint16_t res;
 #if BB_LITTLE_ENDIAN
-	/* gcc 4.2.1 is very clever */
-	memcpy(&res, &bytebuffer[bytebuffer_offset], 2);
+	move_from_unaligned16(res, &bytebuffer[bytebuffer_offset]);
 #else
 	res = bytebuffer[bytebuffer_offset];
 	res |= bytebuffer[bytebuffer_offset + 1] << 8;
@@ -1097,7 +1096,7 @@
 {
 	uint32_t res;
 #if BB_LITTLE_ENDIAN
-	memcpy(&res, &bytebuffer[bytebuffer_offset], 4);
+	move_from_unaligned32(res, &bytebuffer[bytebuffer_offset]);
 #else
 	res = bytebuffer[bytebuffer_offset];
 	res |= bytebuffer[bytebuffer_offset + 1] << 8;