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     .text
     12     .align 4
     13 
     14 armVCM4P10_pIndexTable8x8:
     15     .word  OMX_VC_CHROMA_DC-(P0+8),    OMX_VC_CHROMA_HOR-(P0+8)
     16     .word  OMX_VC_CHROMA_VERT-(P0+8),  OMX_VC_CHROMA_PLANE-(P0+8)
     17 
     18 armVCM4P10_MultiplierTableChroma8x8:
     19     .hword   3, 2, 1,4
     20     .hword  -3,-2,-1,0
     21     .hword   1, 2, 3,4
     22 
     23     .global omxVCM4P10_PredictIntraChroma_8x8
     24     .func   omxVCM4P10_PredictIntraChroma_8x8
     25 omxVCM4P10_PredictIntraChroma_8x8:
     26     PUSH     {r4-r10,lr}
     27     VPUSH    {d8-d15}
     28     ADR      r8, armVCM4P10_pIndexTable8x8
     29     LDR      r6,[sp,#0x68]
     30     LDR      r4,[sp,#0x60]
     31     LDR      r5,[sp,#0x64]
     32     LDR      r7,[sp,#0x6c]
     33     LDR      r8,[r8,r6,LSL #2]
     34 P0: ADD      pc,r8
     35 
     36 OMX_VC_CHROMA_DC:
     37     TST      r7,#2
     38     BEQ      L0xe8
     39     ADD      r9,r0,r4
     40     ADD      r10,r4,r4
     41     VLD1.8   {d1[0]},[r0],r10
     42     VLD1.8   {d1[1]},[r9],r10
     43     VLD1.8   {d1[2]},[r0],r10
     44     VLD1.8   {d1[3]},[r9],r10
     45     VLD1.8   {d1[4]},[r0],r10
     46     VLD1.8   {d1[5]},[r9],r10
     47     VLD1.8   {d1[6]},[r0],r10
     48     VLD1.8   {d1[7]},[r9]
     49     TST      r7,#1
     50     BEQ      L0xcc
     51     VLD1.8   {d0},[r1]
     52     MOV      r0,#0
     53     VPADDL.U8 d2,d0
     54     VPADDL.U16 d3,d2
     55     VPADDL.U8 d2,d1
     56     VPADDL.U16 d1,d2
     57     VADD.I32 d2,d3,d1
     58     VRSHR.U32 d2,d2,#3
     59     VRSHR.U32 d3,d3,#2
     60     VRSHR.U32 d1,d1,#2
     61     VMOV.I8  d5,#0xc
     62     VMOV.I8  d6,#0x4
     63     VSHL.I64 d5,d5,#32
     64     VSHR.U64 d6,d6,#32
     65     VADD.I8  d6,d6,d5
     66     VTBL.8   d0,{d2-d3},d5
     67     VTBL.8   d4,{d1-d2},d6
     68 L0x9c:
     69     ADD      r9,r3,r5
     70     ADD      r10,r5,r5
     71     VST1.8   {d0},[r3],r10
     72     VST1.8   {d0},[r9],r10
     73     VST1.8   {d0},[r3],r10
     74     VST1.8   {d0},[r9],r10
     75     VST1.8   {d4},[r3],r10
     76     VST1.8   {d4},[r9],r10
     77     VST1.8   {d4},[r3],r10
     78     VST1.8   {d4},[r9]
     79     VPOP     {d8-d15}
     80     POP      {r4-r10,pc}
     81 L0xcc:
     82     MOV      r0,#0
     83     VPADDL.U8 d2,d1
     84     VPADDL.U16 d1,d2
     85     VRSHR.U32 d1,d1,#2
     86     VDUP.8   d0,d1[0]
     87     VDUP.8   d4,d1[4]
     88     B        L0x9c
     89 L0xe8:
     90     TST      r7,#1
     91     BEQ      L0x114
     92     VLD1.8   {d0},[r1]
     93     MOV      r0,#0
     94     VPADDL.U8 d2,d0
     95     VPADDL.U16 d3,d2
     96     VRSHR.U32 d3,d3,#2
     97     VMOV.I8  d5,#0x4
     98     VSHL.I64 d5,d5,#32
     99     VTBL.8   d0,{d3},d5
    100     B        L0x11c
    101 L0x114:
    102     VMOV.I8  d0,#0x80
    103     MOV      r0,#0
    104 L0x11c:
    105     ADD      r9,r3,r5
    106     ADD      r10,r5,r5
    107     VST1.8   {d0},[r3],r10
    108     VST1.8   {d0},[r9],r10
    109     VST1.8   {d0},[r3],r10
    110     VST1.8   {d0},[r9],r10
    111     VST1.8   {d0},[r3],r10
    112     VST1.8   {d0},[r9],r10
    113     VST1.8   {d0},[r3],r10
    114     VST1.8   {d0},[r9]
    115     VPOP     {d8-d15}
    116     POP      {r4-r10,pc}
    117 OMX_VC_CHROMA_VERT:
    118     VLD1.8   {d0},[r1]
    119     MOV      r0,#0
    120     B        L0x11c
    121 OMX_VC_CHROMA_HOR:
    122     ADD      r9,r0,r4
    123     ADD      r10,r4,r4
    124     VLD1.8   {d0[]},[r0],r10
    125     VLD1.8   {d1[]},[r9],r10
    126     VLD1.8   {d2[]},[r0],r10
    127     VLD1.8   {d3[]},[r9],r10
    128     VLD1.8   {d4[]},[r0],r10
    129     VLD1.8   {d5[]},[r9],r10
    130     VLD1.8   {d6[]},[r0],r10
    131     VLD1.8   {d7[]},[r9]
    132     B        L0x28c
    133 OMX_VC_CHROMA_PLANE:
    134     ADD      r9,r0,r4
    135     ADD      r10,r4,r4
    136     VLD1.8   {d0},[r1]
    137     VLD1.8   {d2[0]},[r2]
    138     VLD1.8   {d1[0]},[r0],r10
    139     VLD1.8   {d1[1]},[r9],r10
    140     VLD1.8   {d1[2]},[r0],r10
    141     VLD1.8   {d1[3]},[r9],r10
    142     VLD1.8   {d1[4]},[r0],r10
    143     VLD1.8   {d1[5]},[r9],r10
    144     VLD1.8   {d1[6]},[r0],r10
    145     VLD1.8   {d1[7]},[r9]
    146     VREV64.8 d3,d0
    147     VSUBL.U8 q3,d3,d2
    148     VSHR.U64 d3,d3,#8
    149     VSUBL.U8 q2,d3,d0
    150     VREV64.8 d3,d1
    151     VSUBL.U8 q7,d3,d2
    152     VSHR.U64 d3,d3,#8
    153     VSUBL.U8 q6,d3,d1
    154     ADR      r2, armVCM4P10_MultiplierTableChroma8x8
    155     VSHL.I64 d4,d4,#16
    156     VEXT.8   d9,d4,d6,#2
    157     VLD1.16  {d10},[r2]!
    158     VSHL.I64 d12,d12,#16
    159     VEXT.8   d16,d12,d14,#2
    160     VMUL.I16 d11,d9,d10
    161     VMUL.I16 d3,d16,d10
    162     VPADD.I16 d3,d11,d3
    163     VPADDL.S16 d3,d3
    164     VSHL.I32 d2,d3,#4
    165     VADD.I32 d3,d3,d2
    166     VLD1.16  {d10,d11},[r2]
    167     VRSHR.S32 d3,d3,#5
    168     VADDL.U8 q0,d0,d1
    169     VDUP.16  q0,d1[3]
    170     VSHL.I16 q0,q0,#4
    171     VDUP.16  q2,d3[0]
    172     VDUP.16  q3,d3[2]
    173     VMUL.I16 q2,q2,q5
    174     VMUL.I16 q3,q3,q5
    175     VADD.I16 q2,q2,q0
    176     VDUP.16  q0,d6[0]
    177     VDUP.16  q1,d6[1]
    178     VDUP.16  q4,d6[2]
    179     VDUP.16  q5,d6[3]
    180     VDUP.16  q6,d7[0]
    181     VDUP.16  q7,d7[1]
    182     VDUP.16  q8,d7[2]
    183     VDUP.16  q9,d7[3]
    184     VADD.I16 q0,q2,q0
    185     VADD.I16 q1,q2,q1
    186     VADD.I16 q4,q2,q4
    187     VADD.I16 q5,q2,q5
    188     VADD.I16 q6,q2,q6
    189     VADD.I16 q7,q2,q7
    190     VADD.I16 q8,q2,q8
    191     VADD.I16 q9,q2,q9
    192     VQRSHRUN.S16 d0,q0,#5
    193     VQRSHRUN.S16 d1,q1,#5
    194     VQRSHRUN.S16 d2,q4,#5
    195     VQRSHRUN.S16 d3,q5,#5
    196     VQRSHRUN.S16 d4,q6,#5
    197     VQRSHRUN.S16 d5,q7,#5
    198     VQRSHRUN.S16 d6,q8,#5
    199     VQRSHRUN.S16 d7,q9,#5
    200 L0x28c:
    201     ADD      r9,r3,r5
    202     ADD      r10,r5,r5
    203     VST1.8   {d0},[r3],r10
    204     VST1.8   {d1},[r9],r10
    205     VST1.8   {d2},[r3],r10
    206     VST1.8   {d3},[r9],r10
    207     VST1.8   {d4},[r3],r10
    208     VST1.8   {d5},[r9],r10
    209     VST1.8   {d6},[r3],r10
    210     VST1.8   {d7},[r9]
    211     MOV      r0,#0
    212     VPOP     {d8-d15}
    213     POP      {r4-r10,pc}
    214     .endfunc
    215 
    216     .end
    217 
    218