/*
 * 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_DeblockingLumabSLT4_unsafe
armVCM4P10_DeblockingLumabSLT4_unsafe:
    VSUBL.U8 q11,d5,d9
    VLD1.8   {d18[]},[r5]!
    VSUBL.U8 q10,d8,d4
    VLD1.8   {d19[]},[r5]!
    VSHR.S16 q11,q11,#2
    VEXT.8   d18,d18,d19,#4
    VAND     d19,d17,d15
    VBIF     d18,d14,d16
    VRHADD.S16 q10,q11,q10
    VRHADD.U8 d24,d4,d8
    VADD.I8  d31,d18,d19
    VAND     d19,d12,d15
    VQADD.U8 d23,d5,d18
    VQMOVN.S16 d20,q10
    VADD.I8  d31,d31,d19
    VQSUB.U8 d22,d5,d18
    VQADD.U8 d19,d9,d18
    VHADD.U8 d26,d24,d6
    VMIN.S8  d20,d20,d31
    VNEG.S8  d31,d31
    VQSUB.U8 d21,d9,d18
    VHADD.U8 d27,d24,d10
    VMAX.U8  d30,d26,d22
    VMAX.S8  d20,d20,d31
    VMOVL.U8 q14,d4
    VMOVL.U8 q12,d8
    VADDW.S8 q14,q14,d20
    VSUBW.S8 q12,q12,d20
    VQMOVUN.S16 d29,q14
    VQMOVUN.S16 d24,q12
    VMAX.U8  d25,d27,d21
    VMIN.U8  d30,d30,d23
    VMIN.U8  d25,d25,d19
    VBIF     d29,d4,d16
    VBIF     d30,d5,d17
    VBIF     d24,d8,d16
    VBIF     d25,d9,d12
    BX       lr

    .global armVCM4P10_DeblockingLumabSGE4_unsafe
armVCM4P10_DeblockingLumabSGE4_unsafe:
    VSHR.U8  d19,d0,#2
    VADD.I8  d19,d19,d15
    VADDL.U8 q10,d8,d4
    VADD.I8  d19,d19,d15
    VADDL.U8 q11,d6,d9
    VADDW.U8 q12,q10,d5
    VCGT.U8  d19,d19,d13
    VSHR.U16 q11,q11,#1
    VHADD.U16 q11,q12,q11
    VADDW.U8 q12,q12,d6
    VADDL.U8 q13,d7,d6
    VAND     d17,d17,d19
    VHADD.U8 d28,d4,d9
    VSRA.U16 q13,q12,#1
    VAND     d12,d12,d19
    VQRSHRN.U16 d29,q11,#1
    VRHADD.U8 d28,d28,d5
    VQRSHRN.U16 d30,q12,#2
    VADDL.U8 q11,d10,d5
    VADDW.U8 q12,q10,d9
    VBIF     d29,d28,d17
    VQRSHRN.U16 d31,q13,#2
    VADDL.U8 q13,d11,d10
    VSHR.U16 q11,q11,#1
    VHADD.U16 q11,q12,q11
    VADDW.U8 q12,q12,d10
    VHADD.U8 d28,d8,d5
    VBIF     d29,d4,d16
    VBIF     d30,d5,d17
    VSRA.U16 q13,q12,#1
    VQRSHRN.U16 d25,q12,#2
    VQRSHRN.U16 d24,q11,#1
    VRHADD.U8 d22,d28,d9
    VBIF     d25,d9,d12
    VBIF     d31,d6,d17
    VBIF     d24,d22,d12
    VQRSHRN.U16 d28,q13,#2
    VBIF     d24,d8,d16
    VBIF     d28,d10,d12
    BX       lr

    .end

