Home | History | Annotate | Download | only in src
      1 ;//
      2 ;// Copyright (C) 2007-2008 ARM Limited
      3 ;//
      4 ;// Licensed under the Apache License, Version 2.0 (the "License");
      5 ;// you may not use this file except in compliance with the License.
      6 ;// You may obtain a copy of the License at
      7 ;//
      8 ;//      http://www.apache.org/licenses/LICENSE-2.0
      9 ;//
     10 ;// Unless required by applicable law or agreed to in writing, software
     11 ;// distributed under the License is distributed on an "AS IS" BASIS,
     12 ;// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 ;// See the License for the specific language governing permissions and
     14 ;// limitations under the License.
     15 ;//
     16 ;//
     17 ;//
     18 ;// File Name:  armVCM4P10_InterpolateLuma_Copy_unsafe_s.s
     19 ;// OpenMAX DL: v1.0.2
     20 ;// Revision:   12290
     21 ;// Date:       Wednesday, April 9, 2008
     22 ;//
     23 ;//
     24 ;//
     25 ;//
     26 
     27 ;// Function:
     28 ;//     armVCM4P10_InterpolateLuma_Copy4x4_unsafe
     29 ;//
     30 ;// Implements copy from an arbitrary aligned source memory location (pSrc) to an aligned
     31 ;// destination pointed by (pDst)
     32 ;//
     33 ;// Registers preserved for top level function
     34 ;// r1,r3,r4,r5,r6,r7,r10,r11,r14
     35 ;//
     36 ;// Registers modified by the function
     37 ;// r0,r2,r8,r9,r12
     38 
     39         INCLUDE omxtypes_s.h
     40         INCLUDE armCOMM_s.h
     41 
     42         M_VARIANTS ARM1136JS
     43 
     44         EXPORT armVCM4P10_InterpolateLuma_Copy4x4_unsafe
     45 
     46 ;// Declare input registers
     47 pSrc            RN 0
     48 srcStep         RN 1
     49 pDst            RN 2
     50 dstStep         RN 3
     51 
     52 ;// Declare other intermediate registers
     53 x0              RN 4
     54 x1              RN 5
     55 x2              RN 8
     56 x3              RN 9
     57 Temp            RN 12
     58 
     59     IF ARM1136JS
     60 
     61         M_START armVCM4P10_InterpolateLuma_Copy4x4_unsafe, r6
     62 
     63 Copy4x4Start
     64         ;// Do Copy and branch to EndOfInterpolation
     65         AND     Temp, pSrc, #3
     66         BIC     pSrc, pSrc, #3
     67 
     68         M_SWITCH Temp
     69         M_CASE  Copy4x4Align0
     70         M_CASE  Copy4x4Align1
     71         M_CASE  Copy4x4Align2
     72         M_CASE  Copy4x4Align3
     73         M_ENDSWITCH
     74 
     75 Copy4x4Align0
     76         M_LDR   x0, [pSrc], srcStep
     77         M_LDR   x1, [pSrc], srcStep
     78         M_STR   x0, [pDst], dstStep
     79         M_LDR   x2, [pSrc], srcStep
     80         M_STR   x1, [pDst], dstStep
     81         M_LDR   x3, [pSrc], srcStep
     82         M_STR   x2, [pDst], dstStep
     83         M_STR   x3, [pDst], dstStep
     84         B       Copy4x4End
     85 
     86 Copy4x4Align1
     87         LDR     x1, [pSrc, #4]
     88         M_LDR   x0, [pSrc], srcStep
     89         LDR     x3, [pSrc, #4]
     90         M_LDR   x2, [pSrc], srcStep
     91         MOV     x0, x0, LSR #8
     92         ORR     x0, x0, x1, LSL #24
     93         M_STR   x0, [pDst], dstStep
     94         MOV     x2, x2, LSR #8
     95         ORR     x2, x2, x3, LSL #24
     96         LDR     x1, [pSrc, #4]
     97         M_LDR   x0, [pSrc], srcStep
     98         M_STR   x2, [pDst], dstStep
     99         LDR     x3, [pSrc, #4]
    100         M_LDR   x2, [pSrc], srcStep
    101         MOV     x0, x0, LSR #8
    102         ORR     x0, x0, x1, LSL #24
    103         M_STR   x0, [pDst], dstStep
    104         MOV     x2, x2, LSR #8
    105         ORR     x2, x2, x3, LSL #24
    106         M_STR   x2, [pDst], dstStep
    107         B       Copy4x4End
    108 
    109 Copy4x4Align2
    110         LDR     x1, [pSrc, #4]
    111         M_LDR   x0, [pSrc], srcStep
    112         LDR     x3, [pSrc, #4]
    113         M_LDR   x2, [pSrc], srcStep
    114         MOV     x0, x0, LSR #16
    115         ORR     x0, x0, x1, LSL #16
    116         M_STR   x0, [pDst], dstStep
    117         MOV     x2, x2, LSR #16
    118         ORR     x2, x2, x3, LSL #16
    119         M_STR   x2, [pDst], dstStep
    120 
    121         LDR     x1, [pSrc, #4]
    122         M_LDR   x0, [pSrc], srcStep
    123         LDR     x3, [pSrc, #4]
    124         M_LDR   x2, [pSrc], srcStep
    125         MOV     x0, x0, LSR #16
    126         ORR     x0, x0, x1, LSL #16
    127         M_STR   x0, [pDst], dstStep
    128         MOV     x2, x2, LSR #16
    129         ORR     x2, x2, x3, LSL #16
    130         M_STR   x2, [pDst], dstStep
    131         B       Copy4x4End
    132 
    133 Copy4x4Align3
    134         LDR     x1, [pSrc, #4]
    135         M_LDR   x0, [pSrc], srcStep
    136         LDR     x3, [pSrc, #4]
    137         M_LDR   x2, [pSrc], srcStep
    138         MOV     x0, x0, LSR #24
    139         ORR     x0, x0, x1, LSL #8
    140         M_STR   x0, [pDst], dstStep
    141         MOV     x2, x2, LSR #24
    142         ORR     x2, x2, x3, LSL #8
    143         M_STR   x2, [pDst], dstStep
    144 
    145         LDR     x1, [pSrc, #4]
    146         M_LDR   x0, [pSrc], srcStep
    147         LDR     x3, [pSrc, #4]
    148         M_LDR   x2, [pSrc], srcStep
    149         MOV     x0, x0, LSR #24
    150         ORR     x0, x0, x1, LSL #8
    151         M_STR   x0, [pDst], dstStep
    152         MOV     x2, x2, LSR #24
    153         ORR     x2, x2, x3, LSL #8
    154         M_STR   x2, [pDst], dstStep
    155         B       Copy4x4End
    156 
    157 Copy4x4End
    158         M_END
    159 
    160     ENDIF
    161 
    162     END
    163 
    164