diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-12-08 22:56:18 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-12-08 22:56:18 +0000 |
commit | efb545b9bdd3934dcdbf9bc0890a42081b330049 (patch) | |
tree | 4dc9212e49a5dae9890bd324bcc9bf4941e2321d /include/platform.h | |
parent | d1a84a2880073f6cc5e2f9f4e5f236cd110f01a0 (diff) | |
download | busybox-w32-efb545b9bdd3934dcdbf9bc0890a42081b330049.tar.gz busybox-w32-efb545b9bdd3934dcdbf9bc0890a42081b330049.tar.bz2 busybox-w32-efb545b9bdd3934dcdbf9bc0890a42081b330049.zip |
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
Diffstat (limited to 'include/platform.h')
-rw-r--r-- | include/platform.h | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/include/platform.h b/include/platform.h index b8c85dba0..5d6a18107 100644 --- a/include/platform.h +++ b/include/platform.h | |||
@@ -151,13 +151,19 @@ | |||
151 | 151 | ||
152 | /* ---- Unaligned access ------------------------------------ */ | 152 | /* ---- Unaligned access ------------------------------------ */ |
153 | 153 | ||
154 | /* parameter is supposed to be an uint32_t* ptr */ | 154 | /* NB: unaligned parameter should be a pointer, aligned one - |
155 | * a lvalue. This makes it more likely to not swap them by mistake | ||
156 | */ | ||
155 | #if defined(i386) || defined(__x86_64__) | 157 | #if defined(i386) || defined(__x86_64__) |
156 | #define get_unaligned_u32p(u32p) (*(u32p)) | 158 | #define move_from_unaligned16(v, u16p) ((v) = *(uint16_t*)(u16p)) |
159 | #define move_from_unaligned32(v, u32p) ((v) = *(uint32_t*)(u32p)) | ||
160 | #define move_to_unaligned32(u32p, v) (*(uint32_t*)(u32p) = (v)) | ||
157 | /* #elif ... - add your favorite arch today! */ | 161 | /* #elif ... - add your favorite arch today! */ |
158 | #else | 162 | #else |
159 | /* performs reasonably well (gcc usually inlines memcpy here) */ | 163 | /* performs reasonably well (gcc usually inlines memcpy here) */ |
160 | #define get_unaligned_u32p(u32p) ({ uint32_t __t; memcpy(&__t, (u32p), 4); __t; }) | 164 | #define move_from_unaligned16(v, u16p) (memcpy(&(v), (u16p), 2)) |
165 | #define move_from_unaligned32(v, u32p) (memcpy(&(v), (u32p), 4)) | ||
166 | #define move_to_unaligned32(u32p, v) (memcpy((u32p), &(v), 4)) | ||
161 | #endif | 167 | #endif |
162 | 168 | ||
163 | /* ---- Networking ------------------------------------------ */ | 169 | /* ---- Networking ------------------------------------------ */ |