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_WidthBranchTableMVIsNotZero:
     16     .word   WidthIs2MVIsNotZero-(P0+8), WidthIs2MVIsNotZero-(P0+8)
     17     .word   WidthIs4MVIsNotZero-(P0+8), WidthIs4MVIsNotZero-(P0+8)
     18     .word   WidthIs8MVIsNotZero-(P0+8)
     19 
     20 armVCM4P10_WidthBranchTableMVIsZero:
     21     .word   WidthIs2MVIsZero-(P0+8), WidthIs2MVIsZero-(P0+8)
     22     .word   WidthIs4MVIsZero-(P0+8), WidthIs4MVIsZero-(P0+8)
     23     .word   WidthIs8MVIsZero-(P0+8)
     24 
     25     .global armVCM4P10_Interpolate_Chroma
     26     .func   armVCM4P10_Interpolate_Chroma
     27 armVCM4P10_Interpolate_Chroma:
     28     PUSH     {r4-r12,lr}
     29     VPUSH    {d8-d15}
     30     LDRD     r6,r7,[sp,#0x70]
     31     LDRD     r4,r5,[sp,#0x68]
     32     RSB      r8,r6,#8
     33     RSB      r9,r7,#8
     34     CMN      r6,r7
     35     MOV      r10,#1
     36     ADREQ    r11, armVCM4P10_WidthBranchTableMVIsZero
     37     SUB      lr,r1,r10
     38     ADRNE    r11, armVCM4P10_WidthBranchTableMVIsNotZero
     39     VLD1.8   {d0},[r0],r10
     40     SMULBB   r12,r8,r9
     41     SMULBB   r9,r6,r9
     42     VLD1.8   {d1},[r0],lr
     43     SMULBB   r8,r8,r7
     44     SMULBB   r6,r6,r7
     45     VDUP.8   d12,r12
     46     VDUP.8   d13,r9
     47     VDUP.8   d14,r8
     48     VDUP.8   d15,r6
     49     LDR      r11,[r11, r4, lsl #1]
     50 P0: ADD      pc,r11
     51 
     52 WidthIs8MVIsNotZero:
     53     VLD1.8   {d2},[r0],r10
     54     VMULL.U8 q2,d0,d12
     55     VLD1.8   {d3},[r0],lr
     56     VMULL.U8 q3,d2,d12
     57     VLD1.8   {d16},[r0],r10
     58     VMLAL.U8 q2,d1,d13
     59     VLD1.8   {d17},[r0],lr
     60     VMULL.U8 q11,d16,d12
     61     VMLAL.U8 q3,d3,d13
     62     VLD1.8   {d18},[r0],r10
     63     VMLAL.U8 q2,d2,d14
     64     VMLAL.U8 q11,d17,d13
     65     VMULL.U8 q12,d18,d12
     66     VLD1.8   {d19},[r0],lr
     67     VMLAL.U8 q3,d16,d14
     68     VLD1.8   {d0},[r0],r10
     69     VMLAL.U8 q12,d19,d13
     70     VMLAL.U8 q11,d18,d14
     71     VMLAL.U8 q2,d3,d15
     72     VLD1.8   {d1},[r0],lr
     73     VMLAL.U8 q12,d0,d14
     74     VMLAL.U8 q3,d17,d15
     75     VMLAL.U8 q11,d19,d15
     76     SUBS     r5,r5,#4
     77     VMLAL.U8 q12,d1,d15
     78     VQRSHRN.U16 d8,q2,#6
     79     VQRSHRN.U16 d9,q3,#6
     80     VQRSHRN.U16 d20,q11,#6
     81     VST1.64  {d8},[r2],r3
     82     VQRSHRN.U16 d21,q12,#6
     83     VST1.64  {d9},[r2],r3
     84     VST1.64  {d20},[r2],r3
     85     VST1.64  {d21},[r2],r3
     86     BGT      WidthIs8MVIsNotZero
     87     MOV      r0,#0
     88     VPOP     {d8-d15}
     89     POP      {r4-r12,pc}
     90 
     91 WidthIs4MVIsNotZero:
     92     VLD1.8   {d2},[r0],r10
     93     VMULL.U8 q2,d0,d12
     94     VMULL.U8 q3,d2,d12
     95     VLD1.8   {d3},[r0],lr
     96     VMLAL.U8 q2,d1,d13
     97     VMLAL.U8 q3,d3,d13
     98     VLD1.8   {d0},[r0],r10
     99     VMLAL.U8 q2,d2,d14
    100     VMLAL.U8 q3,d0,d14
    101     VLD1.8   {d1},[r0],lr
    102     SUBS     r5,r5,#2
    103     VMLAL.U8 q3,d1,d15
    104     VMLAL.U8 q2,d3,d15
    105     VQRSHRN.U16 d9,q3,#6
    106     VQRSHRN.U16 d8,q2,#6
    107     VST1.32  {d8[0]},[r2],r3
    108     VST1.32  {d9[0]},[r2],r3
    109     BGT      WidthIs4MVIsNotZero
    110     MOV      r0,#0
    111     VPOP     {d8-d15}
    112     POP      {r4-r12,pc}
    113 
    114 WidthIs2MVIsNotZero:
    115     VLD1.8   {d2},[r0],r10
    116     VMULL.U8 q2,d0,d12
    117     VMULL.U8 q3,d2,d12
    118     VLD1.8   {d3},[r0],lr
    119     VMLAL.U8 q2,d1,d13
    120     VMLAL.U8 q3,d3,d13
    121     VLD1.8   {d0},[r0],r10
    122     VMLAL.U8 q2,d2,d14
    123     VMLAL.U8 q3,d0,d14
    124     VLD1.8   {d1},[r0],lr
    125     SUBS     r5,r5,#2
    126     VMLAL.U8 q3,d1,d15
    127     VMLAL.U8 q2,d3,d15
    128     VQRSHRN.U16 d9,q3,#6
    129     VQRSHRN.U16 d8,q2,#6
    130     VST1.16  {d8[0]},[r2],r3
    131     VST1.16  {d9[0]},[r2],r3
    132     BGT      WidthIs2MVIsNotZero
    133     MOV      r0,#0
    134     VPOP     {d8-d15}
    135     POP      {r4-r12,pc}
    136 
    137 WidthIs8MVIsZero:
    138     SUB      r0,r0,r1
    139 WidthIs8LoopMVIsZero:
    140     VLD1.8   {d0},[r0],r1
    141     SUBS     r5,r5,#2
    142     VLD1.8   {d1},[r0],r1
    143     VST1.64  {d0},[r2],r3
    144     VST1.64  {d1},[r2],r3
    145     BGT      WidthIs8LoopMVIsZero
    146     MOV      r0,#0
    147     VPOP     {d8-d15}
    148     POP      {r4-r12,pc}
    149 
    150 WidthIs4MVIsZero:
    151     VLD1.8   {d1},[r0],r1
    152     SUBS     r5,r5,#2
    153     VST1.32  {d0[0]},[r2],r3
    154     VLD1.8   {d0},[r0],r1
    155     VST1.32  {d1[0]},[r2],r3
    156     BGT      WidthIs4MVIsZero
    157     MOV      r0,#0
    158     VPOP     {d8-d15}
    159     POP      {r4-r12,pc}
    160 
    161 WidthIs2MVIsZero:
    162     VLD1.8   {d1},[r0],r1
    163     SUBS     r5,r5,#2
    164     VST1.16  {d0[0]},[r2],r3
    165     VLD1.8   {d0},[r0],r1
    166     VST1.16  {d1[0]},[r2],r3
    167     BGT      WidthIs2MVIsZero
    168     MOV      r0,#0
    169     VPOP     {d8-d15}
    170     POP      {r4-r12,pc}
    171     .endfunc
    172 
    173     .end
    174 
    175