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 armVCM4P10_pSwitchTable4x4:
     16     .word OMX_VC_4x4_VERT-(P0+8),     OMX_VC_4x4_HOR-(P0+8)
     17     .word OMX_VC_4x4_DC-(P0+8),       OMX_VC_4x4_DIAG_DL-(P0+8)
     18     .word OMX_VC_4x4_DIAG_DR-(P0+8),  OMX_VC_4x4_VR-(P0+8)
     19     .word OMX_VC_4x4_HD-(P0+8),       OMX_VC_4x4_VL-(P0+8)
     20     .word OMX_VC_4x4_HU-(P0+8)
     21 
     22     .global omxVCM4P10_PredictIntra_4x4
     23     .func   omxVCM4P10_PredictIntra_4x4
     24 omxVCM4P10_PredictIntra_4x4:
     25     PUSH     {r4-r12,lr}
     26     VPUSH    {d8-d12}
     27     ADR      r8, armVCM4P10_pSwitchTable4x4
     28     LDRD     r6,r7,[sp,#0x58]
     29     LDRD     r4,r5,[sp,#0x50]
     30     LDR      r8,[r8,r6,LSL #2]
     31 P0: ADD      pc, r8
     32 
     33 OMX_VC_4x4_HOR:
     34     ADD      r9,r0,r4
     35     ADD      r10,r4,r4
     36     VLD1.8   {d0[]},[r0],r10
     37     VLD1.8   {d1[]},[r9],r10
     38     VLD1.8   {d2[]},[r0]
     39     VLD1.8   {d3[]},[r9]
     40     ADD      r11,r3,r5
     41     ADD      r12,r5,r5
     42     VST1.32  {d0[0]},[r3],r12
     43     VST1.32  {d1[0]},[r11],r12
     44     VST1.32  {d2[0]},[r3]
     45     VST1.32  {d3[0]},[r11]
     46     B        L0x348
     47 OMX_VC_4x4_VERT:
     48     VLD1.32  {d0[0]},[r1]
     49     ADD      r11,r3,r5
     50     ADD      r12,r5,r5
     51 L0x58:
     52     VST1.32  {d0[0]},[r3],r12
     53     VST1.32  {d0[0]},[r11],r12
     54     VST1.32  {d0[0]},[r3]
     55     VST1.32  {d0[0]},[r11]
     56     B        L0x348
     57 OMX_VC_4x4_DC:
     58     TST      r7,#2
     59     BEQ      L0xdc
     60     ADD      r9,r0,r4
     61     ADD      r10,r4,r4
     62     VLD1.8   {d0[0]},[r0],r10
     63     VLD1.8   {d0[1]},[r9],r10
     64     VLD1.8   {d0[2]},[r0]
     65     VLD1.8   {d0[3]},[r9]
     66     TST      r7,#1
     67     BEQ      L0xbc
     68     VLD1.32  {d0[1]},[r1]
     69     MOV      r0,#0
     70     VPADDL.U8 d1,d0
     71     VPADDL.U16 d1,d1
     72     VPADDL.U32 d1,d1
     73     VRSHR.U64 d1,d1,#3
     74     ADD      r11,r3,r5
     75     ADD      r12,r5,r5
     76     VDUP.8   d0,d1[0]
     77     B        L0x58
     78 L0xbc:
     79     MOV      r0,#0
     80     VPADDL.U8 d1,d0
     81     VPADDL.U16 d1,d1
     82     VRSHR.U32 d1,d1,#2
     83     ADD      r11,r3,r5
     84     ADD      r12,r5,r5
     85     VDUP.8   d0,d1[0]
     86     B        L0x58
     87 L0xdc:
     88     TST      r7,#1
     89     BEQ      L0x108
     90     VLD1.32  {d0[0]},[r1]
     91     MOV      r0,#0
     92     VPADDL.U8 d1,d0
     93     VPADDL.U16 d1,d1
     94     VRSHR.U32 d1,d1,#2
     95     ADD      r11,r3,r5
     96     ADD      r12,r5,r5
     97     VDUP.8   d0,d1[0]
     98     B        L0x58
     99 L0x108:
    100     VMOV.I8  d0,#0x80
    101     MOV      r0,#0
    102     ADD      r11,r3,r5
    103     ADD      r12,r5,r5
    104     B        L0x58
    105 OMX_VC_4x4_DIAG_DL:
    106     TST      r7,#0x40
    107     BEQ      L0x138
    108     VLD1.8   {d3},[r1]
    109     VDUP.8   d2,d3[7]
    110     VEXT.8   d4,d3,d2,#1
    111     VEXT.8   d5,d3,d2,#2
    112     B        L0x14c
    113 L0x138:
    114     VLD1.32  {d0[1]},[r1]
    115     VDUP.8   d2,d0[7]
    116     VEXT.8   d3,d0,d2,#4
    117     VEXT.8   d4,d0,d2,#5
    118     VEXT.8   d5,d0,d2,#6
    119 L0x14c:
    120     VHADD.U8 d6,d3,d5
    121     VRHADD.U8 d6,d6,d4
    122     VST1.32  {d6[0]},[r3],r5
    123     VEXT.8   d6,d6,d6,#1
    124     VST1.32  {d6[0]},[r3],r5
    125     VEXT.8   d6,d6,d6,#1
    126     VST1.32  {d6[0]},[r3],r5
    127     VEXT.8   d6,d6,d6,#1
    128     VST1.32  {d6[0]},[r3]
    129     B        L0x348
    130 OMX_VC_4x4_DIAG_DR:
    131     VLD1.32  {d0[0]},[r1]
    132     VLD1.8   {d1[7]},[r2]
    133     ADD      r9,r0,r4
    134     ADD      r10,r4,r4
    135     ADD      r1,r3,r5
    136     VLD1.8   {d1[6]},[r0],r10
    137     VLD1.8   {d1[5]},[r9],r10
    138     VLD1.8   {d1[4]},[r0]
    139     VLD1.8   {d1[3]},[r9]
    140     VEXT.8   d3,d1,d0,#3
    141     ADD      r4,r1,r5
    142     VEXT.8   d4,d1,d0,#4
    143     ADD      r6,r4,r5
    144     VEXT.8   d5,d1,d0,#5
    145     VHADD.U8 d6,d3,d5
    146     VRHADD.U8 d6,d6,d4
    147     VST1.32  {d6[0]},[r6]
    148     VEXT.8   d6,d6,d6,#1
    149     VST1.32  {d6[0]},[r4]
    150     VEXT.8   d6,d6,d6,#1
    151     VST1.32  {d6[0]},[r1]
    152     VEXT.8   d6,d6,d6,#1
    153     VST1.32  {d6[0]},[r3]
    154     B        L0x348
    155 OMX_VC_4x4_VR:
    156     VLD1.32  {d0[0]},[r1]
    157     VLD1.8   {d0[7]},[r2]
    158     VLD1.8   {d1[7]},[r0],r4
    159     VLD1.8   {d2[7]},[r0],r4
    160     VLD1.8   {d1[6]},[r0]
    161     VEXT.8   d12,d0,d0,#7
    162     VEXT.8   d3,d1,d12,#6
    163     VEXT.8   d4,d2,d12,#7
    164     VEXT.8   d5,d1,d0,#7
    165     VEXT.8   d6,d2,d0,#7
    166     VEXT.8   d11,d1,d12,#7
    167     VHADD.U8 d8,d6,d12
    168     VRHADD.U8 d8,d8,d11
    169     VHADD.U8 d7,d3,d5
    170     VRHADD.U8 d7,d7,d4
    171     VEXT.8   d10,d8,d8,#1
    172     ADD      r11,r3,r5
    173     ADD      r12,r5,r5
    174     VEXT.8   d9,d7,d7,#1
    175     VST1.32  {d10[0]},[r3],r12
    176     VST1.32  {d9[0]},[r11],r12
    177     VST1.32  {d8[0]},[r3],r12
    178     VST1.32  {d7[0]},[r11]
    179     B        L0x348
    180 OMX_VC_4x4_HD:
    181     VLD1.8   {d0},[r1]
    182     VLD1.8   {d1[7]},[r2]
    183     ADD      r9,r0,r4
    184     ADD      r10,r4,r4
    185     VLD1.8   {d1[6]},[r0],r10
    186     VLD1.8   {d1[5]},[r9],r10
    187     VLD1.8   {d1[4]},[r0]
    188     VLD1.8   {d1[3]},[r9]
    189     VEXT.8   d3,d1,d0,#3
    190     VEXT.8   d4,d1,d0,#2
    191     VEXT.8   d5,d1,d0,#1
    192     VHADD.U8 d7,d3,d5
    193     VRHADD.U8 d7,d7,d4
    194     VRHADD.U8 d8,d4,d3
    195     VSHL.I64 d8,d8,#24
    196     VSHL.I64 d6,d7,#16
    197     VZIP.8   d8,d6
    198     VEXT.8   d7,d7,d7,#6
    199     VEXT.8   d8,d6,d7,#2
    200     ADD      r11,r3,r5
    201     ADD      r12,r5,r5
    202     VST1.32  {d8[1]},[r3],r12
    203     VST1.32  {d6[1]},[r11],r12
    204     VST1.32  {d8[0]},[r3]
    205     VST1.32  {d6[0]},[r11]
    206     B        L0x348
    207 OMX_VC_4x4_VL:
    208     TST      r7,#0x40
    209     BEQ      L0x2b4
    210     VLD1.8   {d3},[r1]
    211     VEXT.8   d4,d3,d3,#1
    212     VEXT.8   d5,d4,d4,#1
    213     B        L0x2c8
    214 L0x2b4:
    215     VLD1.32  {d0[1]},[r1]
    216     VDUP.8   d2,d0[7]
    217     VEXT.8   d3,d0,d2,#4
    218     VEXT.8   d4,d0,d2,#5
    219     VEXT.8   d5,d0,d2,#6
    220 L0x2c8:
    221     VRHADD.U8 d7,d4,d3
    222     VHADD.U8 d10,d3,d5
    223     VRHADD.U8 d10,d10,d4
    224     VEXT.8   d8,d7,d7,#1
    225     ADD      r11,r3,r5
    226     ADD      r12,r5,r5
    227     VEXT.8   d9,d10,d8,#1
    228     VST1.32  {d7[0]},[r3],r12
    229     VST1.32  {d10[0]},[r11],r12
    230     VST1.32  {d8[0]},[r3]
    231     VST1.32  {d9[0]},[r11]
    232     B        L0x348
    233 OMX_VC_4x4_HU:
    234     ADD      r9,r0,r4
    235     ADD      r10,r4,r4
    236     VLD1.8   {d1[4]},[r0],r10
    237     VLD1.8   {d1[5]},[r9],r10
    238     VLD1.8   {d1[6]},[r0]
    239     VLD1.8   {d1[7]},[r9]
    240     VDUP.8   d2,d1[7]
    241     VEXT.8   d3,d1,d2,#4
    242     VEXT.8   d4,d1,d2,#5
    243     VEXT.8   d5,d1,d2,#6
    244     VHADD.U8 d7,d3,d5
    245     VRHADD.U8 d7,d7,d4
    246     VRHADD.U8 d8,d4,d3
    247     VZIP.8   d8,d7
    248     VST1.32  {d8[0]},[r3],r5
    249     VEXT.8   d8,d8,d8,#2
    250     VST1.32  {d8[0]},[r3],r5
    251     VEXT.8   d8,d8,d8,#2
    252     VST1.32  {d8[0]},[r3],r5
    253     VST1.32  {d7[0]},[r3]
    254 L0x348:
    255     MOV      r0,#0
    256     VPOP     {d8-d12}
    257     POP      {r4-r12,pc}
    258     .endfunc
    259 
    260     .end
    261