1;//
2;//
3;// File Name:  armVCM4P10_InterpolateLuma_Copy_unsafe_s.s
4;// OpenMAX DL: v1.0.2
5;// Revision:   9641
6;// Date:       Thursday, February 7, 2008
7;//
8;// (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
9;//
10;//
11;//
12
13;// Function:
14;//     armVCM4P10_InterpolateLuma_Copy4x4_unsafe
15;//
16;// Implements copy from an arbitrary aligned source memory location (pSrc) to an aligned
17;// destination pointed by (pDst)
18;//
19;// Registers preserved for top level function
20;// r1,r3,r4,r5,r6,r7,r10,r11,r14
21;//
22;// Registers modified by the function
23;// r0,r2,r8,r9,r12
24
25        INCLUDE omxtypes_s.h
26        INCLUDE armCOMM_s.h
27
28        M_VARIANTS ARM1136JS
29
30        EXPORT armVCM4P10_InterpolateLuma_Copy4x4_unsafe
31
32;// Declare input registers
33pSrc            RN 0
34srcStep         RN 1
35pDst            RN 2
36dstStep         RN 3
37
38;// Declare other intermediate registers
39x0              RN 4
40x1              RN 5
41x2              RN 8
42x3              RN 9
43Temp            RN 12
44
45    IF ARM1136JS
46
47        M_START armVCM4P10_InterpolateLuma_Copy4x4_unsafe, r6
48
49Copy4x4Start
50        ;// Do Copy and branch to EndOfInterpolation
51        AND     Temp, pSrc, #3
52        BIC     pSrc, pSrc, #3
53
54        M_SWITCH Temp
55        M_CASE  Copy4x4Align0
56        M_CASE  Copy4x4Align1
57        M_CASE  Copy4x4Align2
58        M_CASE  Copy4x4Align3
59        M_ENDSWITCH
60
61Copy4x4Align0
62        M_LDR   x0, [pSrc], srcStep
63        M_LDR   x1, [pSrc], srcStep
64        M_STR   x0, [pDst], dstStep
65        M_LDR   x2, [pSrc], srcStep
66        M_STR   x1, [pDst], dstStep
67        M_LDR   x3, [pSrc], srcStep
68        M_STR   x2, [pDst], dstStep
69        M_STR   x3, [pDst], dstStep
70        B       Copy4x4End
71
72Copy4x4Align1
73        LDR     x1, [pSrc, #4]
74        M_LDR   x0, [pSrc], srcStep
75        LDR     x3, [pSrc, #4]
76        M_LDR   x2, [pSrc], srcStep
77        MOV     x0, x0, LSR #8
78        ORR     x0, x0, x1, LSL #24
79        M_STR   x0, [pDst], dstStep
80        MOV     x2, x2, LSR #8
81        ORR     x2, x2, x3, LSL #24
82        LDR     x1, [pSrc, #4]
83        M_LDR   x0, [pSrc], srcStep
84        M_STR   x2, [pDst], dstStep
85        LDR     x3, [pSrc, #4]
86        M_LDR   x2, [pSrc], srcStep
87        MOV     x0, x0, LSR #8
88        ORR     x0, x0, x1, LSL #24
89        M_STR   x0, [pDst], dstStep
90        MOV     x2, x2, LSR #8
91        ORR     x2, x2, x3, LSL #24
92        M_STR   x2, [pDst], dstStep
93        B       Copy4x4End
94
95Copy4x4Align2
96        LDR     x1, [pSrc, #4]
97        M_LDR   x0, [pSrc], srcStep
98        LDR     x3, [pSrc, #4]
99        M_LDR   x2, [pSrc], srcStep
100        MOV     x0, x0, LSR #16
101        ORR     x0, x0, x1, LSL #16
102        M_STR   x0, [pDst], dstStep
103        MOV     x2, x2, LSR #16
104        ORR     x2, x2, x3, LSL #16
105        M_STR   x2, [pDst], dstStep
106
107        LDR     x1, [pSrc, #4]
108        M_LDR   x0, [pSrc], srcStep
109        LDR     x3, [pSrc, #4]
110        M_LDR   x2, [pSrc], srcStep
111        MOV     x0, x0, LSR #16
112        ORR     x0, x0, x1, LSL #16
113        M_STR   x0, [pDst], dstStep
114        MOV     x2, x2, LSR #16
115        ORR     x2, x2, x3, LSL #16
116        M_STR   x2, [pDst], dstStep
117        B       Copy4x4End
118
119Copy4x4Align3
120        LDR     x1, [pSrc, #4]
121        M_LDR   x0, [pSrc], srcStep
122        LDR     x3, [pSrc, #4]
123        M_LDR   x2, [pSrc], srcStep
124        MOV     x0, x0, LSR #24
125        ORR     x0, x0, x1, LSL #8
126        M_STR   x0, [pDst], dstStep
127        MOV     x2, x2, LSR #24
128        ORR     x2, x2, x3, LSL #8
129        M_STR   x2, [pDst], dstStep
130
131        LDR     x1, [pSrc, #4]
132        M_LDR   x0, [pSrc], srcStep
133        LDR     x3, [pSrc, #4]
134        M_LDR   x2, [pSrc], srcStep
135        MOV     x0, x0, LSR #24
136        ORR     x0, x0, x1, LSL #8
137        M_STR   x0, [pDst], dstStep
138        MOV     x2, x2, LSR #24
139        ORR     x2, x2, x3, LSL #8
140        M_STR   x2, [pDst], dstStep
141        B       Copy4x4End
142
143Copy4x4End
144        M_END
145
146    ENDIF
147
148    END
149