1 --- linux-2.6.10/arch/arm/mm/alignment.c.broken 2005-02-11 20:57:58.353668651 +0100
2 +++ linux-2.6.10/arch/arm/mm/alignment.c 2005-02-11 20:58:02.141660877 +0100
9 +#define FIRST_BYTE_16 "mov %1, %1, ror #8\n"
10 +#define FIRST_BYTE_32 "mov %1, %1, ror #24\n"
11 +#define NEXT_BYTE "ror #24"
14 +#define FIRST_BYTE_16
15 +#define FIRST_BYTE_32
16 +#define NEXT_BYTE "lsr #8"
19 #define __get8_unaligned_check(ins,val,addr,err) \
21 "1: "ins" %1, [%2], #1\n" \
23 #define __get16_unaligned_check(ins,val,addr) \
25 unsigned int err = 0, v, a = addr; \
26 - __get8_unaligned_check(ins,val,a,err); \
27 __get8_unaligned_check(ins,v,a,err); \
29 + val = v << ((BE) ? 8 : 0); \
30 + __get8_unaligned_check(ins,v,a,err); \
31 + val |= v << ((BE) ? 0 : 8); \
36 #define __get32_unaligned_check(ins,val,addr) \
38 unsigned int err = 0, v, a = addr; \
39 - __get8_unaligned_check(ins,val,a,err); \
40 __get8_unaligned_check(ins,v,a,err); \
42 + val = v << ((BE) ? 24 : 0); \
43 + __get8_unaligned_check(ins,v,a,err); \
44 + val |= v << ((BE) ? 16 : 8); \
45 __get8_unaligned_check(ins,v,a,err); \
47 + val |= v << ((BE) ? 8 : 16); \
48 __get8_unaligned_check(ins,v,a,err); \
50 + val |= v << ((BE) ? 0 : 24); \
55 #define __put16_unaligned_check(ins,val,addr) \
57 unsigned int err = 0, v = val, a = addr; \
59 + __asm__( FIRST_BYTE_16 \
60 "1: "ins" %1, [%2], #1\n" \
61 - " mov %1, %1, lsr #8\n" \
62 + " mov %1, %1, "NEXT_BYTE"\n" \
63 "2: "ins" %1, [%2]\n" \
65 " .section .fixup,\"ax\"\n" \
67 #define __put32_unaligned_check(ins,val,addr) \
69 unsigned int err = 0, v = val, a = addr; \
71 + __asm__( FIRST_BYTE_32 \
72 "1: "ins" %1, [%2], #1\n" \
73 - " mov %1, %1, lsr #8\n" \
74 + " mov %1, %1, "NEXT_BYTE"\n" \
75 "2: "ins" %1, [%2], #1\n" \
76 - " mov %1, %1, lsr #8\n" \
77 + " mov %1, %1, "NEXT_BYTE"\n" \
78 "3: "ins" %1, [%2], #1\n" \
79 - " mov %1, %1, lsr #8\n" \
80 + " mov %1, %1, "NEXT_BYTE"\n" \
81 "4: "ins" %1, [%2]\n" \
83 " .section .fixup,\"ax\"\n" \