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