armVCM4P10_Interpolate_Chroma_s.S revision 0c1bc742181ded4930842b46e9507372f0b1b963
10c1bc742181ded4930842b46e9507372f0b1b963James Dong/*
20c1bc742181ded4930842b46e9507372f0b1b963James Dong * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
30c1bc742181ded4930842b46e9507372f0b1b963James Dong *
40c1bc742181ded4930842b46e9507372f0b1b963James Dong */
50c1bc742181ded4930842b46e9507372f0b1b963James Dong
60c1bc742181ded4930842b46e9507372f0b1b963James Dong    .eabi_attribute 24, 1
70c1bc742181ded4930842b46e9507372f0b1b963James Dong    .eabi_attribute 25, 1
80c1bc742181ded4930842b46e9507372f0b1b963James Dong
90c1bc742181ded4930842b46e9507372f0b1b963James Dong    .arm
100c1bc742181ded4930842b46e9507372f0b1b963James Dong    .fpu neon
110c1bc742181ded4930842b46e9507372f0b1b963James Dong
120c1bc742181ded4930842b46e9507372f0b1b963James Dong    .section .rodata
130c1bc742181ded4930842b46e9507372f0b1b963James Dong    .align 4
140c1bc742181ded4930842b46e9507372f0b1b963James Dong
150c1bc742181ded4930842b46e9507372f0b1b963James DongarmVCM4P10_WidthBranchTableMVIsNotZero:
160c1bc742181ded4930842b46e9507372f0b1b963James Dong    .word   WidthIs2MVIsNotZero, WidthIs2MVIsNotZero
170c1bc742181ded4930842b46e9507372f0b1b963James Dong    .word   WidthIs4MVIsNotZero, WidthIs4MVIsNotZero
180c1bc742181ded4930842b46e9507372f0b1b963James Dong    .word   WidthIs8MVIsNotZero
190c1bc742181ded4930842b46e9507372f0b1b963James Dong
200c1bc742181ded4930842b46e9507372f0b1b963James DongarmVCM4P10_WidthBranchTableMVIsZero:
210c1bc742181ded4930842b46e9507372f0b1b963James Dong    .word   WidthIs2MVIsZero, WidthIs2MVIsZero
220c1bc742181ded4930842b46e9507372f0b1b963James Dong    .word   WidthIs4MVIsZero, WidthIs4MVIsZero
230c1bc742181ded4930842b46e9507372f0b1b963James Dong    .word   WidthIs8MVIsZero
240c1bc742181ded4930842b46e9507372f0b1b963James Dong
250c1bc742181ded4930842b46e9507372f0b1b963James Dong    .text
260c1bc742181ded4930842b46e9507372f0b1b963James Dong
270c1bc742181ded4930842b46e9507372f0b1b963James Dong    .global armVCM4P10_Interpolate_Chroma
280c1bc742181ded4930842b46e9507372f0b1b963James Dong    .func   armVCM4P10_Interpolate_Chroma
290c1bc742181ded4930842b46e9507372f0b1b963James DongarmVCM4P10_Interpolate_Chroma:
300c1bc742181ded4930842b46e9507372f0b1b963James Dong    PUSH     {r4-r12,lr}
310c1bc742181ded4930842b46e9507372f0b1b963James Dong    VPUSH    {d8-d15}
320c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDRD     r6,r7,[sp,#0x70]
330c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDRD     r4,r5,[sp,#0x68]
340c1bc742181ded4930842b46e9507372f0b1b963James Dong    RSB      r8,r6,#8
350c1bc742181ded4930842b46e9507372f0b1b963James Dong    RSB      r9,r7,#8
360c1bc742181ded4930842b46e9507372f0b1b963James Dong    CMN      r6,r7
370c1bc742181ded4930842b46e9507372f0b1b963James Dong    MOV      r10,#1
380c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDREQ    r11, =armVCM4P10_WidthBranchTableMVIsZero
390c1bc742181ded4930842b46e9507372f0b1b963James Dong    SUB      lr,r1,r10
400c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDRNE    r11, =armVCM4P10_WidthBranchTableMVIsNotZero
410c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d0},[r0],r10
420c1bc742181ded4930842b46e9507372f0b1b963James Dong    SMULBB   r12,r8,r9
430c1bc742181ded4930842b46e9507372f0b1b963James Dong    SMULBB   r9,r6,r9
440c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d1},[r0],lr
450c1bc742181ded4930842b46e9507372f0b1b963James Dong    SMULBB   r8,r8,r7
460c1bc742181ded4930842b46e9507372f0b1b963James Dong    SMULBB   r6,r6,r7
470c1bc742181ded4930842b46e9507372f0b1b963James Dong    VDUP.8   d12,r12
480c1bc742181ded4930842b46e9507372f0b1b963James Dong    VDUP.8   d13,r9
490c1bc742181ded4930842b46e9507372f0b1b963James Dong    VDUP.8   d14,r8
500c1bc742181ded4930842b46e9507372f0b1b963James Dong    VDUP.8   d15,r6
510c1bc742181ded4930842b46e9507372f0b1b963James Dong    LDR      pc,[r11,r4,LSL #1]
520c1bc742181ded4930842b46e9507372f0b1b963James Dong
530c1bc742181ded4930842b46e9507372f0b1b963James DongWidthIs8MVIsNotZero:
540c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d2},[r0],r10
550c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMULL.U8 q2,d0,d12
560c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d3},[r0],lr
570c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMULL.U8 q3,d2,d12
580c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d16},[r0],r10
590c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q2,d1,d13
600c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d17},[r0],lr
610c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMULL.U8 q11,d16,d12
620c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q3,d3,d13
630c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d18},[r0],r10
640c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q2,d2,d14
650c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q11,d17,d13
660c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMULL.U8 q12,d18,d12
670c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d19},[r0],lr
680c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q3,d16,d14
690c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d0},[r0],r10
700c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q12,d19,d13
710c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q11,d18,d14
720c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q2,d3,d15
730c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d1},[r0],lr
740c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q12,d0,d14
750c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q3,d17,d15
760c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q11,d19,d15
770c1bc742181ded4930842b46e9507372f0b1b963James Dong    SUBS     r5,r5,#4
780c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q12,d1,d15
790c1bc742181ded4930842b46e9507372f0b1b963James Dong    VQRSHRN.U16 d8,q2,#6
800c1bc742181ded4930842b46e9507372f0b1b963James Dong    VQRSHRN.U16 d9,q3,#6
810c1bc742181ded4930842b46e9507372f0b1b963James Dong    VQRSHRN.U16 d20,q11,#6
820c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.64  {d8},[r2],r3
830c1bc742181ded4930842b46e9507372f0b1b963James Dong    VQRSHRN.U16 d21,q12,#6
840c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.64  {d9},[r2],r3
850c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.64  {d20},[r2],r3
860c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.64  {d21},[r2],r3
870c1bc742181ded4930842b46e9507372f0b1b963James Dong    BGT      WidthIs8MVIsNotZero
880c1bc742181ded4930842b46e9507372f0b1b963James Dong    MOV      r0,#0
890c1bc742181ded4930842b46e9507372f0b1b963James Dong    VPOP     {d8-d15}
900c1bc742181ded4930842b46e9507372f0b1b963James Dong    POP      {r4-r12,pc}
910c1bc742181ded4930842b46e9507372f0b1b963James Dong
920c1bc742181ded4930842b46e9507372f0b1b963James DongWidthIs4MVIsNotZero:
930c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d2},[r0],r10
940c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMULL.U8 q2,d0,d12
950c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMULL.U8 q3,d2,d12
960c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d3},[r0],lr
970c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q2,d1,d13
980c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q3,d3,d13
990c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d0},[r0],r10
1000c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q2,d2,d14
1010c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q3,d0,d14
1020c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d1},[r0],lr
1030c1bc742181ded4930842b46e9507372f0b1b963James Dong    SUBS     r5,r5,#2
1040c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q3,d1,d15
1050c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q2,d3,d15
1060c1bc742181ded4930842b46e9507372f0b1b963James Dong    VQRSHRN.U16 d9,q3,#6
1070c1bc742181ded4930842b46e9507372f0b1b963James Dong    VQRSHRN.U16 d8,q2,#6
1080c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.32  {d8[0]},[r2],r3
1090c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.32  {d9[0]},[r2],r3
1100c1bc742181ded4930842b46e9507372f0b1b963James Dong    BGT      WidthIs4MVIsNotZero
1110c1bc742181ded4930842b46e9507372f0b1b963James Dong    MOV      r0,#0
1120c1bc742181ded4930842b46e9507372f0b1b963James Dong    VPOP     {d8-d15}
1130c1bc742181ded4930842b46e9507372f0b1b963James Dong    POP      {r4-r12,pc}
1140c1bc742181ded4930842b46e9507372f0b1b963James Dong
1150c1bc742181ded4930842b46e9507372f0b1b963James DongWidthIs2MVIsNotZero:
1160c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d2},[r0],r10
1170c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMULL.U8 q2,d0,d12
1180c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMULL.U8 q3,d2,d12
1190c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d3},[r0],lr
1200c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q2,d1,d13
1210c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q3,d3,d13
1220c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d0},[r0],r10
1230c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q2,d2,d14
1240c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q3,d0,d14
1250c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d1},[r0],lr
1260c1bc742181ded4930842b46e9507372f0b1b963James Dong    SUBS     r5,r5,#2
1270c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q3,d1,d15
1280c1bc742181ded4930842b46e9507372f0b1b963James Dong    VMLAL.U8 q2,d3,d15
1290c1bc742181ded4930842b46e9507372f0b1b963James Dong    VQRSHRN.U16 d9,q3,#6
1300c1bc742181ded4930842b46e9507372f0b1b963James Dong    VQRSHRN.U16 d8,q2,#6
1310c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.16  {d8[0]},[r2],r3
1320c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.16  {d9[0]},[r2],r3
1330c1bc742181ded4930842b46e9507372f0b1b963James Dong    BGT      WidthIs2MVIsNotZero
1340c1bc742181ded4930842b46e9507372f0b1b963James Dong    MOV      r0,#0
1350c1bc742181ded4930842b46e9507372f0b1b963James Dong    VPOP     {d8-d15}
1360c1bc742181ded4930842b46e9507372f0b1b963James Dong    POP      {r4-r12,pc}
1370c1bc742181ded4930842b46e9507372f0b1b963James Dong
1380c1bc742181ded4930842b46e9507372f0b1b963James DongWidthIs8MVIsZero:
1390c1bc742181ded4930842b46e9507372f0b1b963James Dong    SUB      r0,r0,r1
1400c1bc742181ded4930842b46e9507372f0b1b963James DongWidthIs8LoopMVIsZero:
1410c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d0},[r0],r1
1420c1bc742181ded4930842b46e9507372f0b1b963James Dong    SUBS     r5,r5,#2
1430c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d1},[r0],r1
1440c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.64  {d0},[r2],r3
1450c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.64  {d1},[r2],r3
1460c1bc742181ded4930842b46e9507372f0b1b963James Dong    BGT      WidthIs8LoopMVIsZero
1470c1bc742181ded4930842b46e9507372f0b1b963James Dong    MOV      r0,#0
1480c1bc742181ded4930842b46e9507372f0b1b963James Dong    VPOP     {d8-d15}
1490c1bc742181ded4930842b46e9507372f0b1b963James Dong    POP      {r4-r12,pc}
1500c1bc742181ded4930842b46e9507372f0b1b963James Dong
1510c1bc742181ded4930842b46e9507372f0b1b963James DongWidthIs4MVIsZero:
1520c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d1},[r0],r1
1530c1bc742181ded4930842b46e9507372f0b1b963James Dong    SUBS     r5,r5,#2
1540c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.32  {d0[0]},[r2],r3
1550c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d0},[r0],r1
1560c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.32  {d1[0]},[r2],r3
1570c1bc742181ded4930842b46e9507372f0b1b963James Dong    BGT      WidthIs4MVIsZero
1580c1bc742181ded4930842b46e9507372f0b1b963James Dong    MOV      r0,#0
1590c1bc742181ded4930842b46e9507372f0b1b963James Dong    VPOP     {d8-d15}
1600c1bc742181ded4930842b46e9507372f0b1b963James Dong    POP      {r4-r12,pc}
1610c1bc742181ded4930842b46e9507372f0b1b963James Dong
1620c1bc742181ded4930842b46e9507372f0b1b963James DongWidthIs2MVIsZero:
1630c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d1},[r0],r1
1640c1bc742181ded4930842b46e9507372f0b1b963James Dong    SUBS     r5,r5,#2
1650c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.16  {d0[0]},[r2],r3
1660c1bc742181ded4930842b46e9507372f0b1b963James Dong    VLD1.8   {d0},[r0],r1
1670c1bc742181ded4930842b46e9507372f0b1b963James Dong    VST1.16  {d1[0]},[r2],r3
1680c1bc742181ded4930842b46e9507372f0b1b963James Dong    BGT      WidthIs2MVIsZero
1690c1bc742181ded4930842b46e9507372f0b1b963James Dong    MOV      r0,#0
1700c1bc742181ded4930842b46e9507372f0b1b963James Dong    VPOP     {d8-d15}
1710c1bc742181ded4930842b46e9507372f0b1b963James Dong    POP      {r4-r12,pc}
1720c1bc742181ded4930842b46e9507372f0b1b963James Dong    .endfunc
1730c1bc742181ded4930842b46e9507372f0b1b963James Dong
1740c1bc742181ded4930842b46e9507372f0b1b963James Dong    .end
1750c1bc742181ded4930842b46e9507372f0b1b963James Dong
176