/*
 * Copyright (C) 2007-2008 ARM Limited
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
/*
 *
 */

    .eabi_attribute 24, 1
    .eabi_attribute 25, 1

    .arm
    .fpu neon
    .text

    .global armVCM4P10_InterpolateLuma_HalfDiagHorVer4x4_unsafe
    .func   armVCM4P10_InterpolateLuma_HalfDiagHorVer4x4_unsafe
armVCM4P10_InterpolateLuma_HalfDiagHorVer4x4_unsafe:
    PUSH     {r4-r12,lr}
    VLD1.8   {d0,d1},[r0],r1
    VMOV.I16 d31,#0x14
    VMOV.I16 d30,#0x5
    VEXT.8   d4,d0,d1,#1
    VEXT.8   d2,d0,d1,#2
    VEXT.8   d3,d0,d1,#3
    VEXT.8   d5,d0,d1,#4
    VEXT.8   d1,d0,d1,#5
    VADDL.U8 q1,d2,d3
    VADDL.U8 q2,d4,d5
    VADDL.U8 q5,d0,d1
    VLD1.8   {d0,d1},[r0],r1
    VMLA.I16 d10,d2,d31
    VMUL.I16 d8,d4,d30
    VEXT.8   d4,d0,d1,#1
    VEXT.8   d2,d0,d1,#2
    VEXT.8   d3,d0,d1,#3
    VEXT.8   d5,d0,d1,#4
    VEXT.8   d1,d0,d1,#5
    VADDL.U8 q1,d2,d3
    VADDL.U8 q2,d4,d5
    VADDL.U8 q6,d0,d1
    VLD1.8   {d0,d1},[r0],r1
    VSUB.I16 d10,d10,d8
    VMLA.I16 d12,d2,d31
    VMUL.I16 d8,d4,d30
    VEXT.8   d4,d0,d1,#1
    VEXT.8   d2,d0,d1,#2
    VEXT.8   d3,d0,d1,#3
    VEXT.8   d5,d0,d1,#4
    VEXT.8   d1,d0,d1,#5
    VADDL.U8 q1,d2,d3
    VADDL.U8 q2,d4,d5
    VADDL.U8 q7,d0,d1
    VLD1.8   {d0,d1},[r0],r1
    VSUB.I16 d12,d12,d8
    VMLA.I16 d14,d2,d31
    VMUL.I16 d8,d4,d30
    VEXT.8   d4,d0,d1,#1
    VEXT.8   d2,d0,d1,#2
    VEXT.8   d3,d0,d1,#3
    VEXT.8   d5,d0,d1,#4
    VEXT.8   d1,d0,d1,#5
    VADDL.U8 q1,d2,d3
    VADDL.U8 q2,d4,d5
    VADDL.U8 q8,d0,d1
    VLD1.8   {d0,d1},[r0],r1
    VSUB.I16 d14,d14,d8
    VMLA.I16 d16,d2,d31
    VMUL.I16 d8,d4,d30
    VEXT.8   d4,d0,d1,#1
    VEXT.8   d2,d0,d1,#2
    VEXT.8   d3,d0,d1,#3
    VEXT.8   d5,d0,d1,#4
    VEXT.8   d1,d0,d1,#5
    VADDL.U8 q1,d2,d3
    VADDL.U8 q2,d4,d5
    VADDL.U8 q9,d0,d1
    VLD1.8   {d0,d1},[r0],r1
    VSUB.I16 d16,d16,d8
    VMLA.I16 d18,d2,d31
    VMUL.I16 d8,d4,d30
    VEXT.8   d4,d0,d1,#1
    VEXT.8   d2,d0,d1,#2
    VEXT.8   d3,d0,d1,#3
    VEXT.8   d5,d0,d1,#4
    VEXT.8   d1,d0,d1,#5
    VADDL.U8 q1,d2,d3
    VADDL.U8 q2,d4,d5
    VADDL.U8 q10,d0,d1
    VLD1.8   {d0,d1},[r0],r1
    VSUB.I16 d18,d18,d8
    VMLA.I16 d20,d2,d31
    VMUL.I16 d8,d4,d30
    VEXT.8   d4,d0,d1,#1
    VEXT.8   d2,d0,d1,#2
    VEXT.8   d3,d0,d1,#3
    VEXT.8   d5,d0,d1,#4
    VEXT.8   d1,d0,d1,#5
    VADDL.U8 q1,d2,d3
    VADDL.U8 q2,d4,d5
    VADDL.U8 q11,d0,d1
    VLD1.8   {d0,d1},[r0],r1
    VSUB.I16 d20,d20,d8
    VMLA.I16 d22,d2,d31
    VMUL.I16 d8,d4,d30
    VEXT.8   d4,d0,d1,#1
    VEXT.8   d2,d0,d1,#2
    VEXT.8   d3,d0,d1,#3
    VEXT.8   d5,d0,d1,#4
    VEXT.8   d1,d0,d1,#5
    VADDL.U8 q1,d2,d3
    VADDL.U8 q2,d4,d5
    VADDL.U8 q12,d0,d1
    VLD1.8   {d0,d1},[r0],r1
    VSUB.I16 d22,d22,d8
    VMLA.I16 d24,d2,d31
    VMUL.I16 d8,d4,d30
    VEXT.8   d4,d0,d1,#1
    VEXT.8   d2,d0,d1,#2
    VEXT.8   d3,d0,d1,#3
    VEXT.8   d5,d0,d1,#4
    VEXT.8   d1,d0,d1,#5
    VADDL.U8 q1,d2,d3
    VADDL.U8 q2,d4,d5
    VADDL.U8 q13,d0,d1
    VSUB.I16 d24,d24,d8
    VMLA.I16 d26,d2,d31
    VMUL.I16 d8,d4,d30
    VMOV.I32 q15,#0x14
    VMOV.I32 q14,#0x5
    VADDL.S16 q5,d10,d20
    VADDL.S16 q1,d14,d16
    VADDL.S16 q0,d12,d18
    VSUB.I16 d26,d26,d8
    VMLA.I32 q5,q1,q15
    VMUL.I32 q4,q0,q14
    VADDL.S16 q6,d12,d22
    VADDL.S16 q1,d16,d18
    VADDL.S16 q0,d14,d20
    VMLA.I32 q6,q1,q15
    VSUB.I32 q5,q5,q4
    VMUL.I32 q4,q0,q14
    VADDL.S16 q2,d14,d24
    VADDL.S16 q1,d18,d20
    VADDL.S16 q0,d16,d22
    VMLA.I32 q2,q1,q15
    VSUB.I32 q6,q6,q4
    VMUL.I32 q4,q0,q14
    VADDL.S16 q3,d16,d26
    VADDL.S16 q1,d20,d22
    VADDL.S16 q0,d18,d24
    VMLA.I32 q3,q1,q15
    VSUB.I32 q2,q2,q4
    VMLS.I32 q3,q0,q14
    VQRSHRUN.S32 d0,q5,#10
    VQRSHRUN.S32 d2,q6,#10
    VQRSHRUN.S32 d4,q2,#10
    VQRSHRUN.S32 d6,q3,#10
    VQMOVN.U16 d0,q0
    VQMOVN.U16 d2,q1
    VQMOVN.U16 d4,q2
    VQMOVN.U16 d6,q3
    POP      {r4-r12,pc}
    .endfunc

    .end

