Details
Description
These macros are odd and hard to understand.
Please rework them, to have one macro which does the unpacking(based on a pointer argument) and one macro which does the swapping (based on an intermediate value argument).
This would very much improve clarity.