02ee7e24 |
1 | /* |
2 | * (C) GraÅžvydas "notaz" Ignotas, 2011 |
3 | * |
4 | * This work is licensed under the terms of any of these licenses |
5 | * (at your option): |
6 | * - GNU GPL, version 2 or later. |
7 | * - GNU LGPL, version 2.1 or later. |
8 | * See the COPYING file in the top-level directory. |
9 | * |
10 | * This code tries to make better use of pollux/arm926 store buffer |
11 | * by fusing words instead of using strhs. |
12 | */ |
13 | |
14 | .text |
15 | .align 2 |
16 | |
17 | .macro lhw_str rl rt |
18 | lsl \rl, #16 |
19 | lsr \rl, #16 |
20 | orr \rl, \rt, lsl #16 |
21 | str \rl, [r0], #4 |
22 | .endm |
23 | |
24 | .global blit320_640 |
25 | blit320_640: |
26 | stmfd sp!, {r4-r8,lr} |
27 | mov r12, #40 |
28 | 0: |
29 | ldmia r1!, {r2-r8,lr} |
30 | lhw_str r2, r3 |
31 | lhw_str r4, r5 |
32 | lhw_str r6, r7 |
33 | subs r12, #1 |
34 | lhw_str r8, lr |
35 | bgt 0b |
36 | ldmfd sp!, {r4-r8,pc} |
37 | |
38 | |
39 | .global blit320_512 |
40 | blit320_512: |
41 | stmfd sp!, {r4-r8,lr} |
42 | mov r12, #32 |
43 | 0: |
44 | ldmia r1!, {r2-r8,lr} |
45 | lsl r2, #16 |
46 | lsr r2, #16 |
47 | orr r2, r3, lsl #16 |
48 | str r2, [r0], #4 @ 0,2 |
49 | lsr r4, #16 |
50 | lsr r3, #16 |
51 | orr r3, r4, lsl #16 |
52 | str r3, [r0], #4 @ 3,5 |
53 | lsr r5, #16 |
54 | orr r5, r6, lsl #16 |
55 | str r5, [r0], #4 @ 7,8 |
56 | lsr r8, #16 |
57 | lsr lr, #16 |
58 | str r7, [r0], #4 @ 10,11 |
59 | orr r8, lr, lsl #16 |
60 | subs r12, #1 |
61 | str r8, [r0], #4 @ 13,15 |
62 | bgt 0b |
63 | ldmfd sp!, {r4-r8,pc} |
64 | |
65 | |
66 | .macro unaligned_str rl rt |
67 | lsr \rl, #16 |
68 | orr \rl, \rt, lsl #16 |
69 | str \rl, [r0], #4 |
70 | .endm |
71 | |
72 | .global blit320_368 |
73 | blit320_368: |
74 | stmfd sp!, {r4-r8,lr} |
75 | mov r12, #23 |
76 | 0: |
77 | ldmia r1!, {r2-r8,lr} |
78 | unaligned_str r2, r3 @ 1,2 |
79 | unaligned_str r3, r4 @ 3,4 |
80 | unaligned_str r4, r5 @ 5,6 |
81 | subs r12, #1 |
82 | stmia r0!, {r6-r8,lr} @ 8-15 |
83 | bgt 0b |
84 | ldmfd sp!, {r4-r8,pc} |
85 | |
86 | |
87 | @ vim:filetype=armasm |