10d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar///*****************************************************************************
20d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
30d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
40d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
50d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* Licensed under the Apache License, Version 2.0 (the "License");
60d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* you may not use this file except in compliance with the License.
70d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* You may obtain a copy of the License at:
80d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
90d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* http://www.apache.org/licenses/LICENSE-2.0
100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* Unless required by applicable law or agreed to in writing, software
120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* distributed under the License is distributed on an "AS IS" BASIS,
130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* See the License for the specific language governing permissions and
150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* limitations under the License.
160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*****************************************************************************/
180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar///*******************************************************************************
190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* @file
200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*  ihevc_deblk_luma_horz.s
210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* @brief
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*  contains function definitions for inter prediction  interpolation.
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* functions are coded using neon  intrinsics and can be compiled using
250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* rvct
270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* @author
290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*  anand s
300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* @par list of functions:
320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* @remarks
350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*  none
360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//void ihevc_deblk_chroma_horz(UWORD8 *pu1_src,
380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                             WORD32 src_strd,
390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                             WORD32 quant_param_p,
400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                             WORD32 quant_param_q,
410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                             WORD32 qp_offset_u,
420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                             WORD32 qp_offset_v,
430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                             WORD32 tc_offset_div2,
440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                             WORD32 filter_flag_p,
450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                             WORD32 filter_flag_q)
460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//
470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.text
490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.align 4
500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.include "ihevc_neon_macros.s"
510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.extern gai4_ihevc_qp_table
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.extern gai4_ihevc_tc_table
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.globl ihevc_deblk_chroma_horz_av8
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.type ihevc_deblk_chroma_horz_av8, %function
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarihevc_deblk_chroma_horz_av8:
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sxtw        x4,w4
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sxtw        x5,w5
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sxtw        x6,w6
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ldr         w9, [sp]
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sxtw        x9,w9
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    push_v_regs
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    stp         x19, x20,[sp,#-16]!
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         x10, x4
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         x8, x7
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         x7, x5
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         x4, x6
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sub         x12,x0,x1
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ld1         {v0.8b},[x0]
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sub         x5,x12,x1
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    add         x6,x0,x1
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    add         x1,x2,x3
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    uxtl        v0.8h, v0.8b
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ld1         {v2.8b},[x12]
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    add         x2,x1,#1
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ld1         {v4.8b},[x5]
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ld1         {v16.8b},[x6]
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    adds        x1,x10,x2,asr #1
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    uxtl        v2.8h, v2.8b
850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    adrp        x3, :got:gai4_ihevc_qp_table
860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ldr         x3, [x3, #:got_lo12:gai4_ihevc_qp_table]
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bmi         l1.3312
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cmp         x1,#0x39
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bgt         lbl78
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ldr         w1, [x3,x1,lsl #2]
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarlbl78:
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sub         x20,x1,#6
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x1, x20, x1,gt
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarl1.3312:
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    adds        x2,x7,x2,asr #1
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    uxtl        v4.8h, v4.8b
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bmi         l1.3332
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cmp         x2,#0x39
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bgt         lbl85
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ldr         w2, [x3,x2,lsl #2]
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarlbl85:
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sub         x20,x2,#6
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x2, x20, x2,gt
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarl1.3332:
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    add         x1,x1,x4,lsl #1
1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sub         v6.8h,  v0.8h ,  v2.8h
1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    add         x3,x1,#2
1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cmp         x3,#0x35
1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         x20,#0x35
1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x1, x20, x1,gt
1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    shl         v6.8h, v6.8h,#2
1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    uxtl        v16.8h, v16.8b
1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bgt         l1.3368
1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    adds        x3,x1,#2
1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    add         x20,x1,#2
1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x1, x20, x1,pl
1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         x20,#0
1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x1, x20, x1,mi
1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarl1.3368:
1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    adrp        x3, :got:gai4_ihevc_tc_table
1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ldr         x3, [x3, #:got_lo12:gai4_ihevc_tc_table]
1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    add         v4.8h,  v6.8h ,  v4.8h
1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    add         x2,x2,x4,lsl #1
1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sub         v6.8h,  v4.8h ,  v16.8h
1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    add         x4,x2,#2
1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ldr         w1, [x3,x1,lsl #2]
1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cmp         x4,#0x35
1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         x20,#0x35
1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x2, x20, x2,gt
1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    bgt         l1.3412
1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    adds        x4,x2,#2
1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    add         x20,x2,#2
1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x2, x20, x2,pl
1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         x20,#0
1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x2, x20, x2,mi
1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarl1.3412:
1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ldr         w2, [x3,x2,lsl #2]
1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cmp         x8,#0
1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    dup         v31.8h,w2
1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    dup         v30.8h,w1
1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sub         x20,x1,#0
1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    neg         x1, x20
1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    srshr       v6.8h, v6.8h,#3
1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    dup         v28.8h,w1
1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sub         x20,x2,#0
1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    neg         x1, x20
1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    zip1        v4.8h, v30.8h, v31.8h
1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    dup         v29.8h,w1
1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    zip1        v18.8h, v28.8h, v29.8h
1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    smin        v16.8h,  v6.8h ,  v4.8h
1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    smax        v4.8h,  v18.8h ,  v16.8h
1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    add         v2.8h,  v2.8h ,  v4.8h
1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sub         v0.8h,  v0.8h ,  v4.8h
1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sqxtun      v2.8b, v2.8h
1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    sqxtun      v0.8b, v0.8h
1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    beq         l1.3528
1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    st1         {v2.8b},[x12]
1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarl1.3528:
1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cmp         x9,#0
1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    beq         l1.3540
1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    st1         {v0.8b},[x0]
1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarl1.3540:
1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ldp         x19, x20,[sp],#16
1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    pop_v_regs
1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ret
1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
174