From 24900ae5aa80a9fbbd753dded4c822a6eab7931a Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sat, 6 Mar 2010 14:54:10 +0100 Subject: fix assembler memcpy() for little endian This makes our memcpy finally work in all cases, even unaligned --- src/target/firmware/include/asm/assembler.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/target/firmware/include/asm') diff --git a/src/target/firmware/include/asm/assembler.h b/src/target/firmware/include/asm/assembler.h index b43f9d17..cd03e98d 100644 --- a/src/target/firmware/include/asm/assembler.h +++ b/src/target/firmware/include/asm/assembler.h @@ -19,6 +19,21 @@ #include +/* + * Endian independent macros for shifting bytes within registers. + */ +#ifndef __ARMEB__ +#define pull lsr +#define push lsl +#define get_byte_0 lsl #0 +#define get_byte_1 lsr #8 +#define get_byte_2 lsr #16 +#define get_byte_3 lsr #24 +#define put_byte_0 lsl #0 +#define put_byte_1 lsl #8 +#define put_byte_2 lsl #16 +#define put_byte_3 lsl #24 +#else #define pull lsl #define push lsr #define get_byte_0 lsr #24 @@ -29,6 +44,7 @@ #define put_byte_1 lsl #16 #define put_byte_2 lsl #8 #define put_byte_3 lsl #0 +#endif #define PLD(code...) -- cgit v1.2.3