Home | History | Annotate | Download | only in src_gcc
      1 /*
      2  * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
      3  *
      4  */
      5 
      6     .eabi_attribute 24, 1
      7     .eabi_attribute 25, 1
      8 
      9     .arm
     10     .fpu neon
     11 
     12     .section .rodata
     13     .align 4
     14 ;//-------------------------------------------------------
     15 ;// This table for implementing switch case of C in asm by
     16 ;// the mehtod of two levels of indexing.
     17 ;//-------------------------------------------------------
     18 
     19 armVCM4P10_pIndexTable16x16:
     20     .word  OMX_VC_16X16_VERT, OMX_VC_16X16_HOR
     21     .word  OMX_VC_16X16_DC,   OMX_VC_16X16_PLANE
     22 
     23 
     24 
     25 armVCM4P10_MultiplierTable16x16:
     26     .hword   7,  6,  5,  4,  3,  2,  1,  8
     27     .hword   0,  1,  2,  3,  4,  5,  6,  7
     28     .hword   8,  9, 10, 11, 12, 13, 14, 15
     29 
     30     .text
     31 
     32     .global omxVCM4P10_PredictIntra_16x16
     33     .func   omxVCM4P10_PredictIntra_16x16
     34 omxVCM4P10_PredictIntra_16x16:
     35     PUSH     {r4-r12,lr}
     36     VPUSH    {d8-d15}
     37     LDR      r9, =armVCM4P10_pIndexTable16x16
     38     LDR      r6,[sp,#0x70]
     39     LDR      r4,[sp,#0x68]
     40     LDR      r5,[sp,#0x6c]
     41     LDR      r7,[sp,#0x74]
     42     MOV      r12,#0x10
     43     LDR      pc,[r9,r6,LSL #2]
     44 OMX_VC_16X16_VERT:
     45     VLD1.8   {d0,d1},[r1]
     46     ADD      r8,r3,r5
     47     ADD      r10,r5,r5
     48     VST1.8   {d0,d1},[r3],r10
     49     VST1.8   {d0,d1},[r8],r10
     50     VST1.8   {d0,d1},[r3],r10
     51     VST1.8   {d0,d1},[r8],r10
     52     VST1.8   {d0,d1},[r3],r10
     53     VST1.8   {d0,d1},[r8],r10
     54     VST1.8   {d0,d1},[r3],r10
     55     VST1.8   {d0,d1},[r8],r10
     56     VST1.8   {d0,d1},[r3],r10
     57     VST1.8   {d0,d1},[r8],r10
     58     VST1.8   {d0,d1},[r3],r10
     59     VST1.8   {d0,d1},[r8],r10
     60     VST1.8   {d0,d1},[r3],r10
     61     VST1.8   {d0,d1},[r8],r10
     62     VST1.8   {d0,d1},[r3]
     63     VST1.8   {d0,d1},[r8]
     64     MOV      r0,#0
     65     VPOP     {d8-d15}
     66     POP      {r4-r12,pc}
     67 OMX_VC_16X16_HOR:
     68     ADD      r8,r0,r4
     69     ADD      r4,r4,r4
     70     ADD      r11,r3,r5
     71     ADD      r5,r5,r5
     72 L0x8c:
     73     VLD1.8   {d2[],d3[]},[r0],r4
     74     VLD1.8   {d0[],d1[]},[r8],r4
     75     SUBS     r12,r12,#8
     76     VST1.8   {d2,d3},[r3],r5
     77     VST1.8   {d0,d1},[r11],r5
     78     VLD1.8   {d2[],d3[]},[r0],r4
     79     VLD1.8   {d0[],d1[]},[r8],r4
     80     VST1.8   {d2,d3},[r3],r5
     81     VST1.8   {d0,d1},[r11],r5
     82     VLD1.8   {d2[],d3[]},[r0],r4
     83     VLD1.8   {d0[],d1[]},[r8],r4
     84     VST1.8   {d2,d3},[r3],r5
     85     VST1.8   {d0,d1},[r11],r5
     86     VLD1.8   {d2[],d3[]},[r0],r4
     87     VLD1.8   {d0[],d1[]},[r8],r4
     88     VST1.8   {d2,d3},[r3],r5
     89     VST1.8   {d0,d1},[r11],r5
     90     BNE      L0x8c
     91     MOV      r0,#0
     92     VPOP     {d8-d15}
     93     POP      {r4-r12,pc}
     94 OMX_VC_16X16_DC:
     95     MOV      r11,#0
     96     TST      r7,#2
     97     BEQ      L0x14c
     98     ADD      r8,r0,r4
     99     ADD      r10,r4,r4
    100     VLD1.8   {d2[0]},[r0],r10
    101     VLD1.8   {d2[1]},[r8],r10
    102     VLD1.8   {d2[2]},[r0],r10
    103     VLD1.8   {d2[3]},[r8],r10
    104     VLD1.8   {d2[4]},[r0],r10
    105     VLD1.8   {d2[5]},[r8],r10
    106     VLD1.8   {d2[6]},[r0],r10
    107     VLD1.8   {d2[7]},[r8],r10
    108     VLD1.8   {d3[0]},[r0],r10
    109     VLD1.8   {d3[1]},[r8],r10
    110     VLD1.8   {d3[2]},[r0],r10
    111     VLD1.8   {d3[3]},[r8],r10
    112     VLD1.8   {d3[4]},[r0],r10
    113     VLD1.8   {d3[5]},[r8],r10
    114     VLD1.8   {d3[6]},[r0],r10
    115     VLD1.8   {d3[7]},[r8]
    116     VPADDL.U8 q0,q1
    117     ADD      r11,r11,#1
    118     VPADD.I16 d0,d0,d1
    119     VPADDL.U16 d0,d0
    120     VPADDL.U32 d6,d0
    121     VRSHR.U64 d8,d6,#4
    122 L0x14c:
    123     TST      r7,#1
    124     BEQ      L0x170
    125     VLD1.8   {d0,d1},[r1]
    126     ADD      r11,r11,#1
    127     VPADDL.U8 q0,q0
    128     VPADD.I16 d0,d0,d1
    129     VPADDL.U16 d0,d0
    130     VPADDL.U32 d7,d0
    131     VRSHR.U64 d8,d7,#4
    132 L0x170:
    133     CMP      r11,#2
    134     BNE      L0x180
    135     VADD.I64 d8,d7,d6
    136     VRSHR.U64 d8,d8,#5
    137 L0x180:
    138     VDUP.8   q3,d8[0]
    139     CMP      r11,#0
    140     ADD      r8,r3,r5
    141     ADD      r10,r5,r5
    142     BNE      L0x198
    143     VMOV.I8  q3,#0x80
    144 L0x198:
    145     VST1.8   {d6,d7},[r3],r10
    146     VST1.8   {d6,d7},[r8],r10
    147     VST1.8   {d6,d7},[r3],r10
    148     VST1.8   {d6,d7},[r8],r10
    149     VST1.8   {d6,d7},[r3],r10
    150     VST1.8   {d6,d7},[r8],r10
    151     VST1.8   {d6,d7},[r3],r10
    152     VST1.8   {d6,d7},[r8],r10
    153     VST1.8   {d6,d7},[r3],r10
    154     VST1.8   {d6,d7},[r8],r10
    155     VST1.8   {d6,d7},[r3],r10
    156     VST1.8   {d6,d7},[r8],r10
    157     VST1.8   {d6,d7},[r3],r10
    158     VST1.8   {d6,d7},[r8],r10
    159     VST1.8   {d6,d7},[r3],r10
    160     VST1.8   {d6,d7},[r8],r10
    161     MOV      r0,#0
    162     VPOP     {d8-d15}
    163     POP      {r4-r12,pc}
    164 OMX_VC_16X16_PLANE:
    165     LDR      r9, =armVCM4P10_MultiplierTable16x16
    166     VLD1.8   {d0,d1},[r1]
    167     VLD1.8   {d4[0]},[r2]
    168     ADD      r8,r0,r4
    169     ADD      r10,r4,r4
    170     VLD1.8   {d2[0]},[r0],r10
    171     VLD1.8   {d2[1]},[r8],r10
    172     VLD1.8   {d2[2]},[r0],r10
    173     VLD1.8   {d2[3]},[r8],r10
    174     VLD1.8   {d2[4]},[r0],r10
    175     VLD1.8   {d2[5]},[r8],r10
    176     VLD1.8   {d2[6]},[r0],r10
    177     VLD1.8   {d2[7]},[r8],r10
    178     VLD1.8   {d3[0]},[r0],r10
    179     VLD1.8   {d3[1]},[r8],r10
    180     VLD1.8   {d3[2]},[r0],r10
    181     VLD1.8   {d3[3]},[r8],r10
    182     VLD1.8   {d3[4]},[r0],r10
    183     VLD1.8   {d3[5]},[r8],r10
    184     VLD1.8   {d3[6]},[r0],r10
    185     VLD1.8   {d3[7]},[r8]
    186     VREV64.8 d5,d1
    187     VSUBL.U8 q3,d5,d4
    188     VSHR.U64 d5,d5,#8
    189     VSUBL.U8 q4,d5,d0
    190     VSHL.I64 d9,d9,#16
    191     VEXT.8   d9,d9,d6,#2
    192     VREV64.8 d12,d3
    193     VSUBL.U8 q7,d12,d4
    194     VSHR.U64 d12,d12,#8
    195     VSUBL.U8 q8,d12,d2
    196     VLD1.16  {d20,d21},[r9]!
    197     VSHL.I64 d17,d17,#16
    198     VEXT.8   d17,d17,d14,#2
    199     VMULL.S16 q11,d8,d20
    200     VMULL.S16 q12,d16,d20
    201     VMLAL.S16 q11,d9,d21
    202     VMLAL.S16 q12,d17,d21
    203     VPADD.I32 d22,d23,d22
    204     VPADD.I32 d23,d25,d24
    205     VPADDL.S32 q11,q11
    206     VSHL.I64 q12,q11,#2
    207     VADD.I64 q11,q11,q12
    208     VRSHR.S64 q11,q11,#6
    209     VSHL.I64 q12,q11,#3
    210     VSUB.I64 q12,q12,q11
    211     VLD1.16  {d20,d21},[r9]!
    212     VDUP.16  q6,d22[0]
    213     VDUP.16  q7,d23[0]
    214     VADDL.U8 q11,d1,d3
    215     VSHL.I16 q11,q11,#4
    216     VDUP.16  q11,d23[3]
    217     VADD.I64 d1,d24,d25
    218     VLD1.16  {d24,d25},[r9]
    219     VDUP.16  q13,d1[0]
    220     VSUB.I16 q13,q11,q13
    221     VMUL.I16 q5,q6,q10
    222     VMUL.I16 q6,q6,q12
    223     VADD.I16 q0,q5,q13
    224     VADD.I16 q1,q6,q13
    225 L0x2d4:
    226     VQRSHRUN.S16 d6,q0,#5
    227     VQRSHRUN.S16 d7,q1,#5
    228     SUBS     r12,r12,#1
    229     VST1.8   {d6,d7},[r3],r5
    230     VADD.I16 q0,q0,q7
    231     VADD.I16 q1,q1,q7
    232     BNE      L0x2d4
    233     MOV      r0,#0
    234     VPOP     {d8-d15}
    235     POP      {r4-r12,pc}
    236     .endfunc
    237 
    238     .end
    239 
    240