netdev-linux: Avoid "cleverness" in swap_uint64().
authorBen Pfaff <blp@nicira.com>
Fri, 8 Apr 2011 23:44:31 +0000 (16:44 -0700)
committerBen Pfaff <blp@nicira.com>
Mon, 11 Apr 2011 16:35:55 +0000 (09:35 -0700)
commit1de0e8ae5c4a793edc4f033deefb185d933238e4
treece6cae4f5a138596e4025716af55b22d16ca7d25
parent62f3aaedacdd1369e2cd65a01b29c3034735d53b
netdev-linux: Avoid "cleverness" in swap_uint64().

Obviously correct code is easier on everyone.  As the C FAQ says:

20.15c: How can I swap two values without using a temporary?

A: The standard hoary old assembly language programmer's trick is:

a ^= b;
b ^= a;
a ^= b;

But this sort of code has little place in modern, HLL
programming.  Temporary variables are essentially free,
and the idiomatic code using three assignments, namely

int t = a;
a = b;
b = t;

is not only clearer to the human reader, it is more likely to be
recognized by the compiler and turned into the most-efficient
code (e.g. using a swap instruction, if available).  The latter
code is obviously also amenable to use with pointers and
floating-point values, unlike the XOR trick.  See also questions
3.3b and 10.3.
lib/netdev-linux.c