diff options
author | Harald Welte <laforge@gnumonks.org> | 2010-03-06 14:54:10 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2010-03-06 14:54:10 +0100 |
commit | 24900ae5aa80a9fbbd753dded4c822a6eab7931a (patch) | |
tree | 6892a3e31af228a87a8ab812b0a2032387e3457c /src/target/firmware/include/asm | |
parent | c4d75b58049ed48c3d9fa1c230cea40d052a5be0 (diff) |
fix assembler memcpy() for little endian
This makes our memcpy finally work in all cases, even unaligned
Diffstat (limited to 'src/target/firmware/include/asm')
-rw-r--r-- | src/target/firmware/include/asm/assembler.h | 16 |
1 files changed, 16 insertions, 0 deletions
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 <asm/ptrace.h> +/* + * 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...) |