Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[linux-2.6] / arch / frv / lib / insl_sw.S
1 /* insl_sw.S: input array of 4b words from device port with byte swapping
2  *
3  * Copyright (C) 2003 Red Hat, Inc. All Rights Reserved.
4  * Written by David Howells (dhowells@redhat.com)
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version
9  * 2 of the License, or (at your option) any later version.
10  */
11
12
13         .text
14         .p2align        4
15
16 ###############################################################################
17 #
18 # void __insl_sw(unsigned int port, void *buf, int n)
19 #
20 ###############################################################################
21         .globl          __insl_sw
22         .type           __insl_sw,@function
23 __insl_sw:
24         subi.p          gr9,#1,gr9
25         setlos          #1,gr4
26 0:
27         ldi.p           @(gr8,#0),gr5           ; get 0xAABBCCDD
28         subicc          gr10,#1,gr10,icc0
29
30         stbu.p          gr5,@(gr9,gr4)          ; write 0xDD
31         srli            gr5,#8,gr5
32         stbu.p          gr5,@(gr9,gr4)          ; write 0xCC
33         srli            gr5,#8,gr5
34         stbu.p          gr5,@(gr9,gr4)          ; write 0xBB
35         srli            gr5,#8,gr5
36         stbu.p          gr5,@(gr9,gr4)          ; write 0xAA
37         bhi             icc0,#2,0b
38         bralr
39
40         .size           __insl_sw, .-__insl_sw