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