SDL-1.2.14
[sdl_omap.git] / src / video / riscos / SDL_riscosASM.S
1 ;
2 ;    SDL - Simple DirectMedia Layer
3 ;    Copyright (C) 1997-2009 Sam Lantinga
4 ;
5 ;    This library is free software; you can redistribute it and/or
6 ;    modify it under the terms of the GNU Library General Public
7 ;    License as published by the Free Software Foundation; either
8 ;    version 2 of the License, or (at your option) any later version.
9 ;
10 ;    This library is distributed in the hope that it will be useful,
11 ;    but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ;    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 ;    Library General Public License for more details.
14 ;
15 ;    You should have received a copy of the GNU Library General Public
16 ;    License along with this library; if not, write to the Free
17 ;    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18 ;
19 ;    Sam Lantinga
20 ;    slouken@libsdl.org
21 ;
22 ; Assembler routines for RISC OS display
23 ;
24
25         AREA |C$$CODE|
26
27         EXPORT |RISCOS_Put32|
28
29 ; Display 32bpp to 32bpp, 1:1
30 ;
31 ; Code provided by Adrain Lees
32 ;
33 ; entry a1 -> destination
34 ;       a2 =  dest width in pixels
35 ;       a3 =  dest line length in bytes
36 ;       a4 =  dest height in scanlines
37 ;       arg5 -> source
38 ;       arg6 =  byte offset from end of source line to start of next
39
40 Arg5    *       10*4
41 Arg6    *       Arg5+4
42
43 RISCOS_Put32    ROUT
44                 STMFD   sp!,{a2,v1-v6,sl,fp,lr}
45                 LDR     ip,[sp,#Arg5]
46                 MOV     lr,a1
47                 B       ucp64lp
48
49 00              ;tail strip of 1-15 pixels
50
51                 LDR     v1,[ip],#4
52 01              SUBS    a2,a2,#1
53                 STR     v1,[lr],#4
54                 LDRHI   v1,[ip],#4
55                 BHI     %01
56                 B       %02
57
58 ucp64end        ADDS    a2,a2,#16
59                 BNE     %00
60
61 02              SUBS    a4,a4,#1                ;height--
62                 LDRHI   v1,[sp,#Arg6]
63                 LDRHI   a2,[sp]                 ;reload width
64                 BLS     %03
65
66                 ;move to start of next scanline
67
68                 ADD     lr,a1,a3
69                 ADD     a1,a1,a3
70                 ADD     ip,ip,v1
71
72 ucp64lp         SUBS    a2,a2,#16
73                 BLO     ucp64end
74
75                 PLD     [ip,#64]
76
77                 LDR     v1,[ip],#4
78                 LDR     v2,[ip],#4
79                 LDR     v3,[ip],#4
80                 LDR     v4,[ip],#4
81                 LDR     v5,[ip],#4
82                 LDR     v6,[ip],#4
83                 LDR     sl,[ip],#4
84                 LDR     fp,[ip],#4
85                 STR     v1,[lr],#4
86                 STR     v2,[lr],#4
87                 STR     v3,[lr],#4
88                 STR     v4,[lr],#4
89                 STR     v5,[lr],#4
90                 STR     v6,[lr],#4
91                 STR     sl,[lr],#4
92                 STR     fp,[lr],#4
93
94                 PLD     [ip,#64]
95
96                 LDR     v1,[ip],#4
97                 LDR     v2,[ip],#4
98                 LDR     v3,[ip],#4
99                 LDR     v4,[ip],#4
100                 LDR     v5,[ip],#4
101                 LDR     v6,[ip],#4
102                 LDR     sl,[ip],#4
103                 LDR     fp,[ip],#4
104                 STR     v1,[lr],#4
105                 STR     v2,[lr],#4
106                 STR     v3,[lr],#4
107                 STR     v4,[lr],#4
108                 STR     v5,[lr],#4
109                 STR     v6,[lr],#4
110                 STR     sl,[lr],#4
111                 STR     fp,[lr],#4
112
113                 B       ucp64lp
114
115 03              LDMFD   sp!,{a2,v1-v6,sl,fp,pc}
116