2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 22:35:15 +00:00

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.
This commit is contained in:
Ben Pfaff
2011-04-08 16:44:31 -07:00
parent 62f3aaedac
commit 1de0e8ae5c

View File

@@ -1144,9 +1144,9 @@ netdev_linux_update_is_pseudo(struct netdev_dev_linux *netdev_dev)
static void
swap_uint64(uint64_t *a, uint64_t *b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
uint64_t tmp = *a;
*a = *b;
*b = tmp;
}
/* Retrieves current device stats for 'netdev'. */