summaryrefslogtreecommitdiffstats
path: root/src/target/firmware/include/asm
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2010-03-06 14:54:10 +0100
committerHarald Welte <laforge@gnumonks.org>2010-03-06 14:54:10 +0100
commit24900ae5aa80a9fbbd753dded4c822a6eab7931a (patch)
tree6892a3e31af228a87a8ab812b0a2032387e3457c /src/target/firmware/include/asm
parentc4d75b58049ed48c3d9fa1c230cea40d052a5be0 (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.h16
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...)