Commit b52343d1 authored by Thomas Weißschuh's avatar Thomas Weißschuh Committed by Linus Torvalds
Browse files

ARM: clean up the memset64() C wrapper



The current logic to split the 64-bit argument into its 32-bit halves is
byte-order specific and a bit clunky.  Use a union instead which is
easier to read and works in all cases.

GCC still generates the same machine code.

While at it, rename the arguments of the __memset64() prototype to
actually reflect their semantics.

Signed-off-by: default avatarThomas Weißschuh <thomas.weissschuh@linutronix.de>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent cd7a5651
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -39,13 +39,17 @@ static inline void *memset32(uint32_t *p, uint32_t v, __kernel_size_t n)
}

#define __HAVE_ARCH_MEMSET64
extern void *__memset64(uint64_t *, uint32_t low, __kernel_size_t, uint32_t hi);
extern void *__memset64(uint64_t *, uint32_t first, __kernel_size_t, uint32_t second);
static inline void *memset64(uint64_t *p, uint64_t v, __kernel_size_t n)
{
	if (IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN))
		return __memset64(p, v, n * 8, v >> 32);
	else
		return __memset64(p, v >> 32, n * 8, v);
	union {
		uint64_t val;
		struct {
			uint32_t first, second;
		};
	} word = { .val = v };

	return __memset64(p, word.first, n * 8, word.second);
}

/*