1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
10 * Copyright (C) 2007 Jens Arnold
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
22 .macro LEFT8_PW dW1, dW2 | needs %d0 == 24, clobbers %d2
23 lsl.l #8, \dW1 | changes dW1, keeps dW2
29 .macro LEFT24_PW dW1, dW2 | needs %d0 == 24, clobbers %d2
30 lsl.l %d0, \dW1 | changes dW1, keeps dW2
36 /*****************************************************************************/
40 .type MC_put_o_8, @function
43 movem.l (4,%sp), %a0-%a1 | dest, source
46 sub.l %d0, %a1 | align source
47 jmp.l (2, %pc, %d0.l*4)
51 | last table entry coincides with target
55 movem.l %d2-%d5/%a2, (%sp) | save some registers
56 move.l (5*4+12,%sp), %a2 | stride
57 move.l (5*4+16,%sp), %d1 | height
58 moveq.l #24, %d0 | shift amount
60 movem.l (%a1), %d3-%d5
66 movem.l %d3-%d4, (%a0)
70 movem.l (%sp), %d2-%d5/%a2
76 movem.l %d2-%d4, (%sp) | save some registers
77 movem.l (3*4+12,%sp), %d0-%d1 | stride, height
79 movem.l (%a1), %d2-%d4
86 movem.l %d2-%d3, (%a0)
90 movem.l (%sp), %d2-%d4
96 movem.l %d2-%d5/%a2, (%sp) | save some registers
97 move.l (5*4+12,%sp), %a2 | stride
98 move.l (5*4+16,%sp), %d1 | height
99 moveq.l #24, %d0 | shift amount
101 movem.l (%a1), %d3-%d5
107 movem.l %d3-%d4, (%a0)
111 movem.l (%sp), %d2-%d5/%a2
116 movem.l (12,%sp), %d0-%d1 | stride, height
117 subq.l #4, %d0 | adjust for increment within the loop
119 move.l (%a1)+, (%a0)+
127 /*****************************************************************************/
131 .type MC_put_o_16, @function
134 lea.l (-7*4,%sp), %sp
135 movem.l %d2-%d7/%a2, (%sp) | save some registers
136 movem.l (7*4+4,%sp), %a0-%a2| dest, source, stride
137 move.l (7*4+16,%sp), %d1 | height
141 jmp.l (2, %pc, %d0.l*4)
145 | last table entry coincides with target
148 moveq.l #24, %d0 | shift amount
150 movem.l (%a1), %d3-%d7
158 movem.l %d3-%d6, (%a0)
162 movem.l (%sp), %d2-%d7/%a2
168 movem.l (%a1), %d3-%d7
179 movem.l %d3-%d6, (%a0)
183 movem.l (%sp), %d2-%d7/%a2
188 moveq.l #24, %d0 | shift amount
190 movem.l (%a1), %d3-%d7
198 movem.l %d3-%d6, (%a0)
202 movem.l (%sp), %d2-%d7/%a2
208 movem.l (%a1), %d3-%d6
210 movem.l %d3-%d6, (%a0)
214 movem.l (%sp), %d2-%d7/%a2
218 /*****************************************************************************/
220 .macro AVG_PW dW1, dW2 | needs %d0 == 24, clobbers %d1, %d2,
221 move.l \dW1, %d1 | changes dW1, keeps dW2
229 move.l #0xfefefefe, %d2
237 /*****************************************************************************/
241 .type MC_put_x_8, @function
244 lea.l (-6*4,%sp), %sp
245 movem.l %d2-%d6/%a2, (%sp) | save some registers
246 movem.l (6*4+4,%sp), %a0-%a2| dest, source, stride
247 move.l (6*4+16,%sp), %d6 | height
251 jmp.l (2, %pc, %d0.l*4)
255 | last table entry coincides with target
260 movem.l (%a1), %d3-%d5
267 movem.l %d3-%d4, (%a0)
271 movem.l (%sp), %d2-%d6/%a2
278 movem.l (%a1), %d3-%d5
287 movem.l %d3-%d4, (%a0)
291 movem.l (%sp), %d2-%d6/%a2
298 movem.l (%a1), %d3-%d5
305 movem.l %d3-%d4, (%a0)
309 movem.l (%sp), %d2-%d6/%a2
316 movem.l (%a1), %d3-%d5
320 movem.l %d3-%d4, (%a0)
324 movem.l (%sp), %d2-%d6/%a2
328 /*****************************************************************************/
332 .type MC_put_x_16, @function
335 lea.l (-8*4,%sp), %sp
336 movem.l %d2-%d7/%a2-%a3, (%sp) | save some registers
337 movem.l (8*4+4,%sp), %a0-%a3 | dest, source, stride, height
341 jmp.l (2, %pc, %d0.l*4)
345 | last table entry coincides with target
350 movem.l (%a1), %d3-%d7
361 movem.l %d3-%d6, (%a0)
366 movem.l (%sp), %d2-%d7/%a2-%a3
373 movem.l (%a1), %d3-%d7
388 movem.l %d3-%d6, (%a0)
393 movem.l (%sp), %d2-%d7/%a2-%a3
400 movem.l (%a1), %d3-%d7
411 movem.l %d3-%d6, (%a0)
416 movem.l (%sp), %d2-%d7/%a2-%a3
423 movem.l (%a1), %d3-%d7
429 movem.l %d3-%d6, (%a0)
434 movem.l (%sp), %d2-%d7/%a2-%a3