MERGE-master-patchset-edits
[linux-2.6/openmoko-kernel.git] / arch / avr32 / lib / io-readsb.S
blobcb2d8694555964d90606838d450d95499d33da7a
1 /*
2  * Copyright (C) 2004-2006 Atmel Corporation
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  */
9         .text
10 .Lnot_word_aligned:
11 1:      ld.ub   r8, r12[0]
12         sub     r10, 1
13         st.b    r11++, r8
14         reteq   r12
15         tst     r11, r9
16         brne    1b
18         /* fall through */
20         .global __raw_readsb
21         .type   __raw_readsb,@function
22 __raw_readsb:
23         cp.w    r10, 0
24         mov     r9, 3
25         reteq   r12
27         tst     r11, r9
28         brne    .Lnot_word_aligned
30         sub     r10, 4
31         brlt    2f
33 1:      ldins.b r8:t, r12[0]
34         ldins.b r8:u, r12[0]
35         ldins.b r8:l, r12[0]
36         ldins.b r8:b, r12[0]
37         st.w    r11++, r8
38         sub     r10, 4
39         brge    1b
41 2:      sub     r10, -4
42         reteq   r12
44 3:      ld.ub   r8, r12[0]
45         sub     r10, 1
46         st.b    r11++, r8
47         brne    3b
49         retal   r12