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//*******************************************************************************
200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* ,:file
210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*  ihevc_sao_edge_offset_class2.s
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* ,:brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*  Contains function definitions for inter prediction  interpolation.
250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* Functions are coded using NEON  intrinsics and can be compiled using@ ARM
260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* RVCT
270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* ,:author
290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*  Parthiban V
300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* ,:par List of Functions:
320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* ,:remarks
350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*  None
360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*******************************************************************************
380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*/
390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//void ihevc_sao_edge_offset_class2(UWORD8 *pu1_src,
400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                              WORD32 src_strd,
410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                              UWORD8 *pu1_src_left,
420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                              UWORD8 *pu1_src_top,
430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                              UWORD8 *pu1_src_top_left,
440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                              UWORD8 *pu1_src_top_right,
450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                              UWORD8 *pu1_src_bot_left,
460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                              UWORD8 *pu1_avail,
470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                              WORD8 *pi1_sao_offset,
480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                              WORD32 wd,
490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                              WORD32 ht)
500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//**************Variables Vs Registers*****************************************
510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//x0 =>    *pu1_src
520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//x1 =>    src_strd
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//x2 =>    *pu1_src_left
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//x3 =>    *pu1_src_top
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//x4    =>    *pu1_src_top_left
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//x5    =>    *pu1_avail
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//x6    =>    *pi1_sao_offset
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//x7    =>    wd
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//x8=>    ht
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.text
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.p2align 2
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.include "ihevc_neon_macros.s"
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.globl gi1_table_edge_idx
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.globl ihevc_sao_edge_offset_class2_av8
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarihevc_sao_edge_offset_class2_av8:
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    // STMFD sp!,{x4-x12,x14}            //stack stores the values of the arguments
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x5,x7                       //Loads pu1_avail
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDR         x6,[sp]                     //Loads pi1_sao_offset
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDR         w7,[sp,#8]                  //Loads wd
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDR         w8,[sp,#16]                 //Loads ht
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x16,x7 // wd
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x17,x8 // ht
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
829cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    stp         x19, x20,[sp,#-16]!
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    stp         x21, x22,[sp,#-16]!
850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    stp         x23, x24,[sp,#-16]!
860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x9,x7,#1                    //wd - 1
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w10,[x3,x9]                 //pu1_src_top[wd - 1]
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x19,x0                      //Store pu1_src in sp
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x21,x2                      //Store pu1_src_left in sp
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x22,x3                      //Store pu1_src_top in sp
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x23,x5                      //Store pu1_avail in sp
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x24,x4                      //Store pu1_src_top_left in sp
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x9,x7                       //Move width to x9 for loop count
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         sp,sp,#0xA0                 //Decrement the stack pointer to store some temp arr values
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STRB        w10,[sp]                    //u1_src_top_left_tmp = pu1_src_top[wd - 1]
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x10,x8,#1                   //ht-1
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    madd        x11, x10, x1, x0            //pu1_src[(ht - 1) * src_strd + col]
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x12,sp,#0x02                //temp array
1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarAU1_SRC_TOP_LOOP:
1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LD1         {v0.8b},[x11],#8            //pu1_src[(ht - 1) * src_strd + col]
1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x9,x9,#8                    //Decrement the loop count by 8
1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         {v0.8b},[x12],#8            //au1_src_top_tmp[col] = pu1_src[(ht - 1) * src_strd + col]
1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         AU1_SRC_TOP_LOOP
1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarPU1_AVAIL_4_LOOP:
1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w10,[x5,#4]                 //pu1_avail[4]
1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x10,#0
1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w9,[x0]                     //u1_pos_0_0_tmp = pu1_src[0]
1170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BEQ         PU1_AVAIL_7_LOOP
1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w11,[x4]                    //pu1_src_top_left[0]
1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x14,x0,x1                   //pu1_src + src_strd
1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x12,x9,x11                  //pu1_src[0] - pu1_src_top_left[0]
1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w4,[x14,#1]                 //pu1_src[1 + src_strd]
1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movn        x20,#0
1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x12, x20, x12,LT
1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x20,#1
1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x12, x20, x12,GT            //SIGN(pu1_src[0] - pu1_src_top_left[0])
1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADRP        x14, :got:gi1_table_edge_idx //table pointer
1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDR         x14, [x14, #:got_lo12:gi1_table_edge_idx]
1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x11,x9,x4                   //pu1_src[0] - pu1_src[1 + src_strd]
1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movn        x20,#0
1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x11, x20, x11,LT
1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x20,#1
1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x11, x20, x11,GT            //SIGN(pu1_src[0] - pu1_src[1 + src_strd])
1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x4,x12,x11                  //SIGN(pu1_src[0] - pu1_src_top_left[0]) +  SIGN(pu1_src[0] - pu1_src[1 + src_strd])
1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x4,x4,#2                    //edge_idx
1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRSB       x12,[x14,x4]                //edge_idx = gi1_table_edge_idx[edge_idx]
1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x12,#0                      //0 != edge_idx
1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BEQ         PU1_AVAIL_7_LOOP
1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRSB       x10,[x6,x12]                //pi1_sao_offset[edge_idx]
1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x9,x9,x10                   //pu1_src[0] + pi1_sao_offset[edge_idx]
1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         x20,#255
1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cmp         x9,x20
1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x9, x20, x9, ge             //u1_pos_0_0_tmp = CLIP3(pu1_src[0] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1)
1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarPU1_AVAIL_7_LOOP:
1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w14,[x5,#7]                 //pu1_avail[7]
1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x14,#0
1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x10,x7,#1                   //wd - 1
1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x11,x8,#1                   //ht - 1
1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    madd        x12, x11, x1, x10           //wd - 1 + (ht - 1) * src_strd
1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x12,x12,x0                  //pu1_src[wd - 1 + (ht - 1) * src_strd]
1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w10,[x12]                   //u1_pos_wd_ht_tmp = pu1_src[wd - 1 + (ht - 1) * src_strd]
1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BEQ         PU1_AVAIL
1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x4,x12,x1                   //pu1_src[(wd - 1 + (ht - 1) * src_strd) - src_strd]
1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x4,x4,#1
1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w11,[x4]                    //Load pu1_src[wd - 1 + (ht - 1) * src_strd - 1 - src_strd]
1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x4,x4,#1
1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x14,x12,x1                  //pu1_src[(wd - 1 + (ht - 1) * src_strd) + src_strd]
1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x11,x10,x11                 //pu1_src[wd - 1 + (ht - 1) * src_strd] - pu1_src[wd - 1 + (ht - 1) * src_strd- 1 - src_strd]
1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w4,[x14,#1]                 //Load pu1_src[wd - 1 + (ht - 1) * src_strd + 1 + src_strd]
1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movn        x20,#0
1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x11, x20, x11,LT
1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x20,#1
1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x11, x20, x11,GT            //SIGN(pu1_src[wd - 1 + (ht - 1) * src_strd] - pu1_src[wd - 1 + (ht - 1) * src_strd- 1 - src_strd])
1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x4,x10,x4                   //pu1_src[wd - 1 + (ht - 1) * src_strd] - pu1_src[wd - 1 + (ht - 1) * src_strd + 1 + src_strd]
1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movn        x20,#0
1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x4, x20, x4,LT
1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x20,#1
1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x4, x20, x4,GT              //SIGN(pu1_src[wd - 1 + (ht - 1) * src_strd] - pu1_src[wd - 1 + (ht - 1) * src_strd + 1 + src_strd])
1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x11,x11,x4                  //Add 2 sign value
1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x11,x11,#2                  //edge_idx
1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADRP        x14, :got:gi1_table_edge_idx //table pointer
1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDR         x14, [x14, #:got_lo12:gi1_table_edge_idx]
1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRSB       x12,[x14,x11]               //edge_idx = gi1_table_edge_idx[edge_idx]
1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x12,#0
1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BEQ         PU1_AVAIL
1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRSB       x11,[x6,x12]                //pi1_sao_offset[edge_idx]
1890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x10,x10,x11                 //pu1_src[wd - 1 + (ht - 1) * src_strd] + pi1_sao_offset[edge_idx]
1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         x20,#255
1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cmp         x10,x20
1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x10, x20, x10, ge           //u1_pos_wd_ht_tmp = CLIP3(pu1_src[wd - 1 + (ht - 1) * src_strd] + pi1_sao_offset[edge_idx], 0, (1 << bit_depth) - 1)
1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarPU1_AVAIL:
1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x12,x8                      //Move ht
1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movi        v0.16b, #2                  //const_2 = vdupq_n_s8(2)
1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w11,[x5,#3]                 //pu1_avail[3]
1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x14,x2                      //Move pu1_src_left to pu1_src_left_cpy
2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movi        v2.8h, #0                   //const_min_clip = vdupq_n_s16(0)
2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x11,#0
2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w5,[x5,#2]                  //pu1_avail[2]
2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movi        v4.8h, #255                 //const_max_clip = vdupq_n_u16((1 << bit_depth) - 1)
2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x20,x12,#1                  //ht_tmp--
2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x12, x20, x12,EQ
2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x5,#0
2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LD1         {v7.8b},[x6]                //offset_tbl = vld1_s8(pi1_sao_offset)
2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADRP        x11, :got:gi1_table_edge_idx //table pointer
2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDR         x11, [x11, #:got_lo12:gi1_table_edge_idx]
2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x20,x0,x1                   //pu1_src += src_strd
2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x0, x20, x0,EQ
2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LD1         {v6.8b},[x11]               //edge_idx_tbl = vld1_s8(gi1_table_edge_idx)
2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x20,x12,#1                  //ht_tmp--
2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x12, x20, x12,EQ
2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x6,x7                       //move wd to x6 loop_count
2219cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    movi        v1.16b, #0xFF               //au1_mask = vdupq_n_s8(-1)
2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x20,x14,#1                  //pu1_src_left_cpy += 1
2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x14, x20, x14,EQ
2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x15,x0
2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x7,#16                      //Compare wd with 16
2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BLT         WIDTH_RESIDUE               //If not jump to WIDTH_RESIDUE where loop is unrolled for 8 case
2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x8,#4                       //Compare ht with 4
2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BLE         WD_16_HT_4_LOOP             //If jump to WD_16_HT_4_LOOP
2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWIDTH_LOOP_16:
2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x7,x16                      //Loads wd
2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x5,x23                      //Loads pu1_avail
2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x6,x7                       //col == wd
2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRb        w20, [x5]                   //pu1_avail[0]
2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        w8,w20,w8,EQ
2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x20,#-1
2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x8, x20, x8,NE              //au1_mask = vsetq_lane_s8(-1, au1_mask, 0)
2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2429cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v1.8b[0], w8                //au1_mask = vsetq_lane_s8((-1||pu1_avail[0]), au1_mask, 0)
2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x6,#16                      //if(col == 16)
2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         SKIP_AU1_MASK_VAL
2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w8,[x5,#1]                  //pu1_avail[1]
2469cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v1.16b[15], w8              //au1_mask = vsetq_lane_s8(pu1_avail[1], au1_mask, 15)
2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarSKIP_AU1_MASK_VAL:
2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w11,[x5,#2]                 //pu1_avail[2]
2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x11,#0
2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x20,x0,x1                   //pu1_src - src_strd
2530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x8, x20, x8,EQ
2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x8, x3, x8,NE               //pu1_src_top_cpy
2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x8,x8,#1                    //pu1_src_top_cpy - 1 || pu1_src - src_strd - 1
2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x7,x16                      //Loads wd
2589cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    LD1         {v3.16b},[x8]               //pu1_top_row = vld1q_u8(pu1_src - src_strd - 1) || vld1q_u8(pu1_src_top_cpy - 1)
2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x3,x3,#16
2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x5,sp,#0x42                 //*au1_src_left_tmp
2629cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    LD1         {v5.16b},[x0]               //pu1_cur_row = vld1q_u8(pu1_src)
2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x4,x17                      //Loads ht
2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x7,x7,x6                    //(wd - col)
2669cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v17.16b,  v5.16b ,  v3.16b  //vcgtq_u8(pu1_cur_row, pu1_top_row)
2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x8,x19                      //Loads *pu1_src
2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x7,x7,#15                   //15 + (wd - col)
2709cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v16.16b,  v3.16b ,  v5.16b  //vcltq_u8(pu1_cur_row, pu1_top_row)
2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x7,x8,x7                    //pu1_src[0 * src_strd + 15 + (wd - col)]
2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x5,#1
2749cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    SUB         v17.16b,  v16.16b ,  v17.16b //sign_up = vreinterpretq_s8_u8(vsubq_u8(cmp_lt, cmp_gt))
2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarAU1_SRC_LEFT_LOOP:
2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w8,[x7]                     //load the value and increment by src_strd
2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x7,x7,x1
2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STRB        w8,[x5,#1]!                 //store it in the stack pointer
2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x4,x4,#1                    //decrement the loop count
2810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         AU1_SRC_LEFT_LOOP
2820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x8,x0,x1                    //I Iteration *pu1_src + src_strd
2840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movi        v18.16b, #0
2850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x4,x23                      //I Loads pu1_avail
2860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x7,x12                      //row count, move ht_tmp to x7
2880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LD1         {v16.16b},[x8]              //I pu1_next_row = vld1q_u8(pu1_src_cpy + src_strd)
2890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w4,[x4,#2]                  //I pu1_avail[2]
2900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w5,[x8,#16]                 //I pu1_src_cpy[src_strd + 16]
2920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         v18.8b[0], w5               //I pu1_next_row_tmp = vsetq_lane_u8(pu1_src_cpy[src_strd + 16], pu1_next_row_tmp, 0)
2930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    EXT         v18.16b,  v16.16b ,  v18.16b,#1 //I pu1_next_row_tmp = vextq_u8(pu1_next_row, pu1_next_row_tmp, 1)
2950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x4,#0                       //I
2960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         SIGN_UP_CHANGE_DONE         //I
2970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarSIGN_UP_CHANGE:
2990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x2,x12,x7                   //I ht_tmp - row
3000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w11,[x0]                    //I pu1_src_cpy[0]
3010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x2,x14,x2                   //I pu1_src_left_cpy[ht_tmp - row]
3020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x2,x2,#1
3030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w5,[x2]                     //I load the value
3040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x2,x2,#1
3050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x4,x11,x5                   //I pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row]
3060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movn        x20,#0
3070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x4, x20, x4,LT              //I
3080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x20,#1
3090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x4, x20, x4,GT              //I SIGN(pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row])
3109cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v17.8b[0], w4               //I sign_up = sign_up = vsetq_lane_s8(SIGN(pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row]), sign_up, 0)
3110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarSIGN_UP_CHANGE_DONE:
3139cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v3.16b,  v5.16b ,  v18.16b  //I vcgtq_u8(pu1_cur_row, pu1_next_row_tmp)
3149cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    ADD         v24.16b,  v0.16b ,  v17.16b //I edge_idx = vaddq_s8(const_2, sign_up)
3150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3169cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v18.16b,  v18.16b ,  v5.16b //I vcltq_u8(pu1_cur_row, pu1_next_row_tmp)
3179cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    SUB         v3.16b,  v18.16b ,  v3.16b  //I sign_down = vreinterpretq_s8_u8(vsubq_u8(cmp_lt, cmp_gt))
3180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3199cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    ADD         v24.16b,  v24.16b ,  v3.16b //I edge_idx = vaddq_s8(edge_idx, sign_down)
3200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    TBL         v18.16b, {v6.16b},v24.16b   //I vtbl1_s8(edge_idx_tbl, vget_low_s8(edge_idx))
3210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//  TBL v19.8b, {v6.16b},v25.8b                //I vtbl1_s8(edge_idx_tbl, vget_high_s8(edge_idx))
3220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3239cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    AND         v18.16b,  v18.16b ,  v1.16b //I edge_idx = vandq_s8(edge_idx, au1_mask)
3240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3259cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    NEG         v17.16b, v3.16b             //I sign_up = vnegq_s8(sign_down)
3269cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    TBL         v3.16b, {v7.16b},v18.16b    //I offset = vtbl1_s8(offset_tbl, vget_low_s8(edge_idx))
3279cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    EXT         v17.16b,  v17.16b ,  v17.16b,#15 //I sign_up = vextq_s8(sign_up, sign_up, 15)
3280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3299cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    Uxtl        v20.8h, v5.8b               //I pi2_tmp_cur_row.val[0] = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(pu1_cur_row)))
3300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//  TBL v11.8b, {v7.16b},v19.8b                    //I offset = vtbl1_s8(offset_tbl, vget_high_s8(edge_idx))
3319cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    SADDW       v20.8h,  v20.8h ,  v3.8b    //I pi2_tmp_cur_row.val[0] = vaddw_s8(pi2_tmp_cur_row.val[0], offset)
3320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SMAX        v20.8h,  v20.8h ,  v2.8h    //I pi2_tmp_cur_row.val[0] = vmaxq_s16(pi2_tmp_cur_row.val[0], const_min_clip)
3349cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    Uxtl2       v22.8h, v5.16b              //I pi2_tmp_cur_row.val[1] = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(pu1_cur_row)))
3350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UMIN        v20.8h,  v20.8h ,  v4.8h    //I pi2_tmp_cur_row.val[0] = vreinterpretq_s16_u16(vminq_u16(vreinterpretq_u16_s16(pi2_tmp_cur_row.val[0]), const_max_clip))
3379cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v5.16b, v16.16b             //I pu1_cur_row = pu1_next_row
3380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3399cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    SADDW2      v22.8h,  v22.8h ,  v3.16b   //I pi2_tmp_cur_row.val[1] = vaddw_s8(pi2_tmp_cur_row.val[1], offset)
3400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    xtn         v20.8b,  v20.8h             //I vmovn_s16(pi2_tmp_cur_row.val[0])
3410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SMAX        v22.8h,  v22.8h ,  v2.8h    //I pi2_tmp_cur_row.val[1] = vmaxq_s16(pi2_tmp_cur_row.val[1], const_min_clip)
3430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x7,x7,#1                    //I Decrement the ht_tmp loop count by 1
3440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UMIN        v22.8h,  v22.8h ,  v4.8h    //I pi2_tmp_cur_row.val[1] = vreinterpretq_s16_u16(vminq_u16(vreinterpretq_u16_s16(pi2_tmp_cur_row.val[1]), const_max_clip))
3460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    xtn2        v20.16b,  v22.8h            //I vmovn_s16(pi2_tmp_cur_row.val[1])
3480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarPU1_SRC_LOOP:
3500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         { v20.16b},[x0],x1          //I vst1q_u8(pu1_src_cpy, pu1_cur_row)
3520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x8,x0,x1                    //II iteration *pu1_src + src_strd
3530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LD1         {v16.16b},[x8]              //II pu1_next_row = vld1q_u8(pu1_src_cpy + src_strd)
3550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x11,x8,x1                   //III iteration *pu1_src + src_strd
3560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w5,[x8,#16]                 //II pu1_src_cpy[src_strd + 16]
3580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LD1         {v30.16b},[x11]             //III pu1_next_row = vld1q_u8(pu1_src_cpy + src_strd)
3590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w4,[x0]                     //II pu1_src_cpy[0]
3600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w8,[x11,#16]                //III pu1_src_cpy[src_strd + 16]
3620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         v28.8b[0], w5               //II pu1_next_row_tmp = vsetq_lane_u8(pu1_src_cpy[src_strd + 16], pu1_next_row_tmp, 0)
3630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x12,x7                   //II ht_tmp - row
3650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    EXT         v22.16b,  v16.16b ,  v28.16b,#1 //II pu1_next_row_tmp = vextq_u8(pu1_next_row, pu1_next_row_tmp, 1)
3660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x5,x14,x5                   //II pu1_src_left_cpy[ht_tmp - row]
3670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x5,#1
3690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w5,[x5]                     //II load the value
3700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         v18.8b[0], w8               //III pu1_next_row_tmp = vsetq_lane_u8(pu1_src_cpy[src_strd + 16], pu1_next_row_tmp, 0)
3710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x7,x7,#1                    //II Decrement the ht_tmp loop count by 1
3720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x4,x4,x5                    //II pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row]
3740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    EXT         v18.16b,  v30.16b ,  v18.16b,#1 //III pu1_next_row_tmp = vextq_u8(pu1_next_row, pu1_next_row_tmp, 1)
3750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w2,[x0,x1]                  //III pu1_src_cpy[0]
3760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3779cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v24.16b,  v5.16b ,  v22.16b //II vcgtq_u8(pu1_cur_row, pu1_next_row_tmp)
3780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x12,x7                   //III ht_tmp - row
3790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movn        x20,#0
3810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x4, x20, x4,LT              //II
3829cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v22.16b,  v22.16b ,  v5.16b //II vcltq_u8(pu1_cur_row, pu1_next_row_tmp)
3830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x5,x14,x5                   //III pu1_src_left_cpy[ht_tmp - row]
3840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x20,#1
3860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x4, x20, x4,GT              //II SIGN(pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row])
3870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         v24.16b,  v22.16b ,  v24.16b //II sign_down = vreinterpretq_s8_u8(vsubq_u8(cmp_lt, cmp_gt))
3880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x5,#1
3890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w5,[x5]                     //III load the value
3900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x2,x2,x5                    //III pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row]
3929cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v17.8b[0], w4               //II sign_up = sign_up = vsetq_lane_s8(SIGN(pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row]), sign_up, 0)
3930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
3940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movn        x20,#0
3950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x2, x20, x2,LT              //III
3969cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v3.16b,  v16.16b ,  v18.16b //III vcgtq_u8(pu1_cur_row, pu1_next_row_tmp)
3970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x20,#1
3980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x2, x20, x2,GT              //III SIGN(pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row])
3990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4009cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    ADD         v22.16b,  v0.16b ,  v17.16b //II edge_idx = vaddq_s8(const_2, sign_up)
4010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         v22.16b,  v22.16b ,  v24.16b //II edge_idx = vaddq_s8(edge_idx, sign_down)
4020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    cmhi        v18.16b,  v18.16b ,  v16.16b //III vcltq_u8(pu1_cur_row, pu1_next_row_tmp)
4040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    TBL         v22.16b, {v6.16b},v22.16b   //II vtbl1_s8(edge_idx_tbl, vget_low_s8(edge_idx))
4059cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    NEG         v17.16b, v24.16b            //II sign_up = vnegq_s8(sign_down)
4060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4079cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    SUB         v3.16b,  v18.16b ,  v3.16b  //III sign_down = vreinterpretq_s8_u8(vsubq_u8(cmp_lt, cmp_gt))
4080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//  TBL v23.8b, {v6.16b},v23.8b                //II vtbl1_s8(edge_idx_tbl, vget_high_s8(edge_idx))
4099cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    EXT         v17.16b,  v17.16b ,  v17.16b,#15 //II sign_up = vextq_s8(sign_up, sign_up, 15)
4100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4119cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    AND         v22.16b,  v22.16b ,  v1.16b //II edge_idx = vandq_s8(edge_idx, au1_mask)
4129cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v17.8b[0], w2               //III sign_up = sign_up = vsetq_lane_s8(SIGN(pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row]), sign_up, 0)
4130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4149cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    ADD         v18.16b,  v0.16b ,  v17.16b //III edge_idx = vaddq_s8(const_2, sign_up)
4150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    TBL         v24.16b, {v7.16b},v22.16b   //II offset = vtbl1_s8(offset_tbl, vget_low_s8(edge_idx))
4169cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    ADD         v18.16b,  v18.16b ,  v3.16b //III edge_idx = vaddq_s8(edge_idx, sign_down)
4170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4189cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    Uxtl        v26.8h, v5.8b               //II pi2_tmp_cur_row.val[0] = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(pu1_cur_row)))
4190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    TBL         v18.16b, {v6.16b},v18.16b   //III vtbl1_s8(edge_idx_tbl, vget_low_s8(edge_idx))
4209cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    NEG         v17.16b, v3.16b             //III sign_up = vnegq_s8(sign_down)
4210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SADDW       v26.8h,  v26.8h ,  v24.8b   //II pi2_tmp_cur_row.val[0] = vaddw_s8(pi2_tmp_cur_row.val[0], offset)
4230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//  TBL v19.8b, {v6.16b},v19.8b                //III vtbl1_s8(edge_idx_tbl, vget_high_s8(edge_idx))
4249cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    EXT         v17.16b,  v17.16b ,  v17.16b,#15 //III sign_up = vextq_s8(sign_up, sign_up, 15)
4250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4269cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    AND         v18.16b,  v18.16b ,  v1.16b //III edge_idx = vandq_s8(edge_idx, au1_mask)
4270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    Uxtl        v20.8h, v16.8b              //III pi2_tmp_cur_row.val[0] = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(pu1_cur_row)))
4280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SMAX        v26.8h,  v26.8h ,  v2.8h    //II pi2_tmp_cur_row.val[0] = vmaxq_s16(pi2_tmp_cur_row.val[0], const_min_clip)
4309cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    TBL         v3.16b, {v7.16b},v18.16b    //III offset = vtbl1_s8(offset_tbl, vget_low_s8(edge_idx))
4319cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    SADDW       v20.8h,  v20.8h ,  v3.8b    //III pi2_tmp_cur_row.val[0] = vaddw_s8(pi2_tmp_cur_row.val[0], offset)
4320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UMIN        v26.8h,  v26.8h ,  v4.8h    //II pi2_tmp_cur_row.val[0] = vreinterpretq_s16_u16(vminq_u16(vreinterpretq_u16_s16(pi2_tmp_cur_row.val[0]), const_max_clip))
4340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//  TBL v25.8b, {v7.16b},v23.8b                    //II offset = vtbl1_s8(offset_tbl, vget_high_s8(edge_idx))
4350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SMAX        v20.8h,  v20.8h ,  v2.8h    //III pi2_tmp_cur_row.val[0] = vmaxq_s16(pi2_tmp_cur_row.val[0], const_min_clip)
4360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4379cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    Uxtl2       v28.8h, v5.16b              //II pi2_tmp_cur_row.val[1] = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(pu1_cur_row)))
4380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UMIN        v20.8h,  v20.8h ,  v4.8h    //III pi2_tmp_cur_row.val[0] = vreinterpretq_s16_u16(vminq_u16(vreinterpretq_u16_s16(pi2_tmp_cur_row.val[0]), const_max_clip))
4390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SADDW2      v28.8h,  v28.8h ,  v24.16b  //II pi2_tmp_cur_row.val[1] = vaddw_s8(pi2_tmp_cur_row.val[1], offset)
4410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//  TBL v11.8b, {v7.16b},v19.8b                    //III offset = vtbl1_s8(offset_tbl, vget_high_s8(edge_idx))
4420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SMAX        v28.8h,  v28.8h ,  v2.8h    //II pi2_tmp_cur_row.val[1] = vmaxq_s16(pi2_tmp_cur_row.val[1], const_min_clip)
4430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UMIN        v28.8h,  v28.8h ,  v4.8h    //II pi2_tmp_cur_row.val[1] = vreinterpretq_s16_u16(vminq_u16(vreinterpretq_u16_s16(pi2_tmp_cur_row.val[1]), const_max_clip))
4450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    Uxtl2       v18.8h, v16.16b             //III pi2_tmp_cur_row.val[1] = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(pu1_cur_row)))
4460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4479cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v5.16b, v30.16b             //III pu1_cur_row = pu1_next_row
4480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    xtn         v26.8b,  v26.8h             //II vmovn_s16(pi2_tmp_cur_row.val[0])
4490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    xtn2        v26.16b,  v28.8h            //II vmovn_s16(pi2_tmp_cur_row.val[1])
4519cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    SADDW2      v18.8h,  v18.8h ,  v3.16b   //III pi2_tmp_cur_row.val[1] = vaddw_s8(pi2_tmp_cur_row.val[1], offset)
4520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SMAX        v18.8h,  v18.8h ,  v2.8h    //III pi2_tmp_cur_row.val[1] = vmaxq_s16(pi2_tmp_cur_row.val[1], const_min_clip)
4540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    xtn         v20.8b,  v20.8h             //III vmovn_s16(pi2_tmp_cur_row.val[0])
4550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x7,x7,#1                    //III Decrement the ht_tmp loop count by 1
4570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UMIN        v18.8h,  v18.8h ,  v4.8h    //III pi2_tmp_cur_row.val[1] = vreinterpretq_s16_u16(vminq_u16(vreinterpretq_u16_s16(pi2_tmp_cur_row.val[1]), const_max_clip))
4580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x7,#1                       //III
4590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         { v26.16b},[x0],x1          //II vst1q_u8(pu1_src_cpy, pu1_cur_row)
4610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    xtn2        v20.16b,  v18.8h            //III vmovn_s16(pi2_tmp_cur_row.val[1])
4620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BGT         PU1_SRC_LOOP                //III If not equal jump to PU1_SRC_LOOP
4640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BLT         INNER_LOOP_DONE
4650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         { v20.16b},[x0],x1          //III vst1q_u8(pu1_src_cpy, pu1_cur_row)
4670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x8,x0,x1                    //*pu1_src + src_strd
4680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w2,[x0]                     //pu1_src_cpy[0]
4700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LD1         {v16.16b},[x8]              //pu1_next_row = vld1q_u8(pu1_src_cpy + src_strd)
4710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w5,[x8,#16]                 //pu1_src_cpy[src_strd + 16]
4720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x11,x12,x7                  //ht_tmp - row
4740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         v18.8b[0], w5               //pu1_next_row_tmp = vsetq_lane_u8(pu1_src_cpy[src_strd + 16], pu1_next_row_tmp, 0)
4750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x11,x14,x11                 //pu1_src_left_cpy[ht_tmp - row]
4760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x11,x11,#1
4780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w5,[x11]                    //load the value
4790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x11,x11,#1
4800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    EXT         v18.16b,  v16.16b ,  v18.16b,#1 //pu1_next_row_tmp = vextq_u8(pu1_next_row, pu1_next_row_tmp, 1)
4810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x4,x2,x5                    //pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row]
4820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4839cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v3.16b,  v5.16b ,  v18.16b  //vcgtq_u8(pu1_cur_row, pu1_next_row_tmp)
4840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movn        x20,#0
4850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x4, x20, x4,LT
4860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x20,#1
4880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x4, x20, x4,GT              //SIGN(pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row])
4899cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v18.16b,  v18.16b ,  v5.16b //vcltq_u8(pu1_cur_row, pu1_next_row_tmp)
4900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4919cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v17.8b[0], w4               //sign_up = sign_up = vsetq_lane_s8(SIGN(pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row]), sign_up, 0)
4929cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    SUB         v3.16b,  v18.16b ,  v3.16b  //sign_down = vreinterpretq_s8_u8(vsubq_u8(cmp_lt, cmp_gt))
4930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4949cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    ADD         v18.16b,  v0.16b ,  v17.16b //edge_idx = vaddq_s8(const_2, sign_up)
4959cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    ADD         v18.16b,  v18.16b ,  v3.16b //edge_idx = vaddq_s8(edge_idx, sign_down)
4960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
4970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    TBL         v18.16b, {v6.16b},v18.16b   //vtbl1_s8(edge_idx_tbl, vget_low_s8(edge_idx))
4989cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    NEG         v17.16b, v3.16b             //sign_up = vnegq_s8(sign_down)
4990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//  TBL v19.8b, {v6.16b},v19.8b                //vtbl1_s8(edge_idx_tbl, vget_high_s8(edge_idx))
5019cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    EXT         v17.16b,  v17.16b ,  v17.16b,#15 //sign_up = vextq_s8(sign_up, sign_up, 15)
5020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5039cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    AND         v18.16b,  v18.16b ,  v1.16b //edge_idx = vandq_s8(edge_idx, au1_mask)
5040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5059cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    TBL         v3.16b, {v7.16b},v18.16b    //offset = vtbl1_s8(offset_tbl, vget_low_s8(edge_idx))
5060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5079cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    Uxtl        v20.8h, v5.8b               //pi2_tmp_cur_row.val[0] = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(pu1_cur_row)))
5080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//  TBL v11.8b, {v7.16b},v19.8b                    //offset = vtbl1_s8(offset_tbl, vget_high_s8(edge_idx))
5099cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    SADDW       v20.8h,  v20.8h ,  v3.8b    //pi2_tmp_cur_row.val[0] = vaddw_s8(pi2_tmp_cur_row.val[0], offset)
5100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SMAX        v20.8h,  v20.8h ,  v2.8h    //pi2_tmp_cur_row.val[0] = vmaxq_s16(pi2_tmp_cur_row.val[0], const_min_clip)
5129cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    Uxtl2       v5.8h, v5.16b               //pi2_tmp_cur_row.val[1] = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(pu1_cur_row)))
5130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UMIN        v20.8h,  v20.8h ,  v4.8h    //pi2_tmp_cur_row.val[0] = vreinterpretq_s16_u16(vminq_u16(vreinterpretq_u16_s16(pi2_tmp_cur_row.val[0]), const_max_clip))
5159cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    SADDW2      v5.8h,  v5.8h ,  v3.16b     //pi2_tmp_cur_row.val[1] = vaddw_s8(pi2_tmp_cur_row.val[1], offset)
5160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5179cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    SMAX        v5.8h,  v5.8h ,  v2.8h      //pi2_tmp_cur_row.val[1] = vmaxq_s16(pi2_tmp_cur_row.val[1], const_min_clip)
5180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    xtn         v20.8b,  v20.8h             //vmovn_s16(pi2_tmp_cur_row.val[0])
5190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5209cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    UMIN        v5.8h,  v5.8h ,  v4.8h      //pi2_tmp_cur_row.val[1] = vreinterpretq_s16_u16(vminq_u16(vreinterpretq_u16_s16(pi2_tmp_cur_row.val[1]), const_max_clip))
5219cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    xtn2        v20.16b,  v5.8h             //vmovn_s16(pi2_tmp_cur_row.val[1])
5220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarINNER_LOOP_DONE:
5250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x5,sp,#0x42                 //*au1_src_left_tmp
5260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         { v20.16b},[x0],x1          //vst1q_u8(pu1_src_cpy, pu1_cur_row)
5270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x2,x21                      //Loads *pu1_src_left
5280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x8,x17                      //Loads ht
5300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x5,#1
5310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x2,x2,#1
5330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarSRC_LEFT_LOOP:
5340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w7,[x5,#1]!                 //au1_src_left_tmp[row]
5350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x8,x8,#1
5360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STRB        w7,[x2,#1]!                 //pu1_src_left[row] = au1_src_left_tmp[row]
5370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         SRC_LEFT_LOOP
5380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x6,x6,#16                   //Decrement the wd loop count by 16
5400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x6,#8                       //Check whether residue remains
5410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BLT         RE_ASSINING_LOOP            //Jump to re-assigning loop
5420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x7,x16                      //Loads wd
5430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x0,x15                      //Loads *pu1_src
5440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x7,x7,x6
5450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x0,x0,x7
5460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BGT         WIDTH_LOOP_16               //If not equal jump to width_loop
5470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BEQ         WIDTH_RESIDUE               //If residue remains jump to residue loop
5480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWD_16_HT_4_LOOP:
5510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x7,x16                      //Loads wd
5520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x5,x23                      //Loads pu1_avail
5530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x6,x7                       //col == wd
5540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRb        w20, [x5]                   //pu1_avail[0]
5550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        w8,w20,w8,EQ
5560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x20,#-1
5570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x8, x20, x8,NE              //au1_mask = vsetq_lane_s8(-1, au1_mask, 0)
5580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5599cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v1.8b[0], w8                //au1_mask = vsetq_lane_s8((-1||pu1_avail[0]), au1_mask, 0)
5600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x6,#16                      //if(col == 16)
5610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         SKIP_AU1_MASK_VAL_WD_16_HT_4
5620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w8,[x5,#1]                  //pu1_avail[1]
5639cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v1.16b[15], w8              //au1_mask = vsetq_lane_s8(pu1_avail[1], au1_mask, 15)
5640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarSKIP_AU1_MASK_VAL_WD_16_HT_4:
5660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w8,[x5,#2]                  //pu1_avail[2]
5670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x8,#0
5680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x20,x0,x1                   //pu1_src - src_strd
5700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x8, x20, x8,EQ
5710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x8, x3, x8,NE
5720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x8,x8,#1                    //pu1_src_top_cpy - 1 || pu1_src - src_strd - 1
5730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x7,x16                      //Loads wd
5759cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    LD1         {v3.16b},[x8]               //pu1_top_row = vld1q_u8(pu1_src - src_strd - 1) || vld1q_u8(pu1_src_top_cpy - 1)
5760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x3,x3,#16
5770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x5,sp,#0x42                 //*au1_src_left_tmp
5799cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    LD1         {v5.16b},[x0]               //pu1_cur_row = vld1q_u8(pu1_src)
5800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x4,x17                      //Loads ht
5810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x7,x7,x6                    //(wd - col)
5839cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v17.16b,  v5.16b ,  v3.16b  //vcgtq_u8(pu1_cur_row, pu1_top_row)
5840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x8,x19                      //Loads *pu1_src
5850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x7,x7,#15                   //15 + (wd - col)
5879cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v16.16b,  v3.16b ,  v5.16b  //vcltq_u8(pu1_cur_row, pu1_top_row)
5880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x7,x8,x7                    //pu1_src[0 * src_strd + 15 + (wd - col)]
5890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x5,#1
5919cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    SUB         v17.16b,  v16.16b ,  v17.16b //sign_up = vreinterpretq_s8_u8(vsubq_u8(cmp_lt, cmp_gt))
5920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
5930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarAU1_SRC_LEFT_LOOP_WD_16_HT_4:
5940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w8,[x7]                     //load the value and increment by src_strd
5950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x7,x7,x1
5960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x4,x4,#1                    //decrement the loop count
5970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STRB        w8,[x5,#1]!                 //store it in the stack pointer
5980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         AU1_SRC_LEFT_LOOP_WD_16_HT_4
5990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movi        v18.16b, #0
6010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x7,x12                      //row count, move ht_tmp to x7
6020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarPU1_SRC_LOOP_WD_16_HT_4:
6040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x8,x0,x1                    //*pu1_src + src_strd
6050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LD1         {v16.16b},[x8]              //pu1_next_row = vld1q_u8(pu1_src_cpy + src_strd)
6060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w5,[x8,#16]                 //pu1_src_cpy[src_strd + 16]
6080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         v18.8b[0], w5               //pu1_next_row_tmp = vsetq_lane_u8(pu1_src_cpy[src_strd + 16], pu1_next_row_tmp, 0)
6090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    EXT         v18.16b,  v16.16b ,  v18.16b,#1 //pu1_next_row_tmp = vextq_u8(pu1_next_row, pu1_next_row_tmp, 1)
6100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x7,x12
6120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BLT         SIGN_UP_CHANGE_WD_16_HT_4
6130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x5,x23                      //Loads pu1_avail
6140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w5,[x5,#2]                  //pu1_avail[2]
6150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x5,#0
6160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         SIGN_UP_CHANGE_DONE_WD_16_HT_4
6170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarSIGN_UP_CHANGE_WD_16_HT_4:
6190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w8,[x0]                     //pu1_src_cpy[0]
6200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x12,x7                   //ht_tmp - row
6210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x5,x14,x5                   //pu1_src_left_cpy[ht_tmp - row]
6220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x5,#1
6230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w5,[x5]                     //load the value
6240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x8,x8,x5                    //pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row]
6250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movn        x20,#0
6260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x8, x20, x8,LT
6270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x20,#1
6280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x8, x20, x8,GT              //SIGN(pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row])
6299cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v17.8b[0], w8               //sign_up = sign_up = vsetq_lane_s8(SIGN(pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row]), sign_up, 0)
6300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarSIGN_UP_CHANGE_DONE_WD_16_HT_4:
6329cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v20.16b,  v5.16b ,  v18.16b //vcgtq_u8(pu1_cur_row, pu1_next_row_tmp)
6339cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v22.16b,  v18.16b ,  v5.16b //vcltq_u8(pu1_cur_row, pu1_next_row_tmp)
6340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         v24.16b,  v22.16b ,  v20.16b //sign_down = vreinterpretq_s8_u8(vsubq_u8(cmp_lt, cmp_gt))
6350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6369cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    ADD         v26.16b,  v0.16b ,  v17.16b //edge_idx = vaddq_s8(const_2, sign_up)
6370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         v26.16b,  v26.16b ,  v24.16b //edge_idx = vaddq_s8(edge_idx, sign_down)
6380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    TBL         v26.16b, {v6.16b},v26.16b   //vtbl1_s8(edge_idx_tbl, vget_low_s8(edge_idx))
6390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//  TBL v27.8b, {v6.16b},v27.8b                //vtbl1_s8(edge_idx_tbl, vget_high_s8(edge_idx))
6400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6419cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    AND         v26.16b,  v26.16b ,  v1.16b //edge_idx = vandq_s8(edge_idx, au1_mask)
6420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6439cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    NEG         v17.16b, v24.16b            //sign_up = vnegq_s8(sign_down)
6449cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    EXT         v17.16b,  v17.16b ,  v17.16b,#15 //sign_up = vextq_s8(sign_up, sign_up, 15)
6450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    TBL         v24.16b, {v7.16b},v26.16b   //offset = vtbl1_s8(offset_tbl, vget_low_s8(edge_idx))
6479cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    Uxtl        v28.8h, v5.8b               //pi2_tmp_cur_row.val[0] = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(pu1_cur_row)))
6480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SADDW       v28.8h,  v28.8h ,  v24.8b   //pi2_tmp_cur_row.val[0] = vaddw_s8(pi2_tmp_cur_row.val[0], offset)
6490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SMAX        v28.8h,  v28.8h ,  v2.8h    //pi2_tmp_cur_row.val[0] = vmaxq_s16(pi2_tmp_cur_row.val[0], const_min_clip)
6500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UMIN        v28.8h,  v28.8h ,  v4.8h    //pi2_tmp_cur_row.val[0] = vreinterpretq_s16_u16(vminq_u16(vreinterpretq_u16_s16(pi2_tmp_cur_row.val[0]), const_max_clip))
6510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//  TBL v25.8b, {v7.16b},v27.8b                    //offset = vtbl1_s8(offset_tbl, vget_high_s8(edge_idx))
6539cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    Uxtl2       v30.8h, v5.16b              //pi2_tmp_cur_row.val[1] = vreinterpretq_s16_u16(vmovl_u8(vget_high_u8(pu1_cur_row)))
6540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SADDW2      v30.8h,  v30.8h ,  v24.16b  //pi2_tmp_cur_row.val[1] = vaddw_s8(pi2_tmp_cur_row.val[1], offset)
6550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SMAX        v30.8h,  v30.8h ,  v2.8h    //pi2_tmp_cur_row.val[1] = vmaxq_s16(pi2_tmp_cur_row.val[1], const_min_clip)
6560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UMIN        v30.8h,  v30.8h ,  v4.8h    //pi2_tmp_cur_row.val[1] = vreinterpretq_s16_u16(vminq_u16(vreinterpretq_u16_s16(pi2_tmp_cur_row.val[1]), const_max_clip))
6570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    xtn         v28.8b,  v28.8h             //vmovn_s16(pi2_tmp_cur_row.val[0])
6590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    xtn2        v28.16b,  v30.8h            //vmovn_s16(pi2_tmp_cur_row.val[1])
6600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         { v28.16b},[x0],x1          //vst1q_u8(pu1_src_cpy, pu1_cur_row)
6620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6639cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v5.16b, v16.16b             //pu1_cur_row = pu1_next_row
6640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x7,x7,#1                    //Decrement the ht_tmp loop count by 1
6650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         PU1_SRC_LOOP_WD_16_HT_4     //If not equal jump to PU1_SRC_LOOP_WD_16_HT_4
6660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x8,x17                      //Loads ht
6680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x5,sp,#0x42                 //*au1_src_left_tmp
6690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x2,x21                      //Loads *pu1_src_left
6700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x5,#1
6710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x2,x2,#1
6720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarSRC_LEFT_LOOP_WD_16_HT_4:
6740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w7,[x5,#1]!                 //au1_src_left_tmp[row]
6750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STRB        w7,[x2,#1]!                 //pu1_src_left[row] = au1_src_left_tmp[row]
6760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x8,x8,#1
6770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         SRC_LEFT_LOOP_WD_16_HT_4
6780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x6,x6,#16                   //Decrement the wd loop count by 16
6800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BLE         RE_ASSINING_LOOP            //Jump to re-assigning loop
6810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarWIDTH_RESIDUE:
6840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x7,x16                      //Loads wd
6850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x5,x23                      //Loads pu1_avail
6860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x6,x7                       //wd_residue == wd
6870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRb        w20, [x5]                   //pu1_avail[0]
6880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        w8,w20,w8,EQ
6890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x20,#-1
6910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x8, x20, x8,NE
6929cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v1.8b[0], w8                //au1_mask = vsetq_lane_s8(-1, au1_mask, 0)
6930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w8,[x5,#1]                  //pu1_avail[1]
6959cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v1.8b[7], w8                //au1_mask = vsetq_lane_s8(pu1_avail[1], au1_mask, 15)
6960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
6970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarPU1_AVAIL_2_RESIDUE:
6980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w11,[x5,#2]                 //pu1_avail[2]
6999cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    LD1         {v5.16b},[x0]               //pu1_cur_row = vld1q_u8(pu1_src)
7000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x11,#0
7010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x20,x0,x1                   //pu1_src - src_strd
7030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x8, x20, x8,EQ
7040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x8, x3, x8,NE
7050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x8,x8,#1
7070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x5,sp,#0x42                 //*au1_src_left_tmp
7099cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    LD1         {v3.16b},[x8],#16           //pu1_top_row = vld1q_u8(pu1_src_top_cpy - 1)
7100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x7,x16                      //Loads wd
7110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x4,x17                      //Loads ht
7139cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v17.16b,  v5.16b ,  v3.16b  //vcgtq_u8(pu1_cur_row, pu1_top_row)
7140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x7,x7,#1                    //(wd - 1)
7150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x8,x19                      //Loads *pu1_src
7179cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v16.16b,  v3.16b ,  v5.16b  //vcltq_u8(pu1_cur_row, pu1_top_row)
7180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x5,#1
7190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x7,x8,x7                    //pu1_src[0 * src_strd + (wd - 1)]
7219cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    SUB         v17.16b,  v16.16b ,  v17.16b //sign_up = vreinterpretq_s8_u8(vsubq_u8(cmp_lt, cmp_gt))
7220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarAU1_SRC_LEFT_LOOP_RESIDUE:
7250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w8,[x7]                     //load the value and increment by src_strd
7260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x7,x7,x1
7270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x4,x4,#1                    //decrement the loop count
7280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STRB        w8,[x5,#1]!                 //store it in the stack pointer
7290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         AU1_SRC_LEFT_LOOP_RESIDUE
7300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x7,x12                      //row count, move ht_tmp to x7
7330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarPU1_SRC_LOOP_RESIDUE:
7350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movi        v18.16b, #0
7360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x8,x0,x1                    //*pu1_src + src_strd
7370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LD1         {v16.16b},[x8]              //pu1_next_row = vld1q_u8(pu1_src_cpy + src_strd)
7380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w8,[x8,#16]                 //pu1_src_cpy[src_strd + 16]
7400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    mov         v18.8b[0], w8               //pu1_next_row_tmp = vsetq_lane_u8(pu1_src_cpy[src_strd + 16], pu1_next_row_tmp, 0)
7410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    EXT         v18.16b,  v16.16b ,  v18.16b,#1 //pu1_next_row_tmp = vextq_u8(pu1_next_row, pu1_next_row_tmp, 1)
7420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x7,x12
7440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BLT         SIGN_UP_CHANGE_RESIDUE
7450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x5,x23                      //Loads pu1_avail
7460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w5,[x5,#2]                  //pu1_avail[2]
7470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    CMP         x5,#0
7480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         SIGN_UP_CHANGE_DONE_RESIDUE
7490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarSIGN_UP_CHANGE_RESIDUE:
7510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w8,[x0]                     //pu1_src_cpy[0]
7520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x12,x7                   //ht_tmp - row
7530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x5,x14,x5
7550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x5,#1
7560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w5,[x5]                     //load the value
7570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x8,x8,x5                    //pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row]
7580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    movn        x20,#0
7590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x8, x20, x8,LT
7600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x20,#1
7610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    csel        x8, x20, x8,GT              //SIGN(pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row])
7629cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v17.8b[0], w8               //sign_up = sign_up = vsetq_lane_s8(SIGN(pu1_src_cpy[0] - pu1_src_left_cpy[ht_tmp - 1 - row]), sign_up, 0)
7630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarSIGN_UP_CHANGE_DONE_RESIDUE:
7659cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v20.16b,  v5.16b ,  v18.16b //vcgtq_u8(pu1_cur_row, pu1_next_row_tmp)
7669cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    cmhi        v22.16b,  v18.16b ,  v5.16b //vcltq_u8(pu1_cur_row, pu1_next_row_tmp)
7670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         v24.16b,  v22.16b ,  v20.16b //sign_down = vreinterpretq_s8_u8(vsubq_u8(cmp_lt, cmp_gt))
7680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7699cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    ADD         v26.16b,  v0.16b ,  v17.16b //edge_idx = vaddq_s8(const_2, sign_up)
7700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         v26.16b,  v26.16b ,  v24.16b //edge_idx = vaddq_s8(edge_idx, sign_down)
7710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    TBL         v26.16b, {v6.16b},v26.16b   //vtbl1_s8(edge_idx_tbl, vget_low_s8(edge_idx))
7720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//  TBL v27.8b, {v6.16b},v27.8b                //vtbl1_s8(edge_idx_tbl, vget_high_s8(edge_idx))
7730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7749cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    AND         v26.16b,  v26.16b ,  v1.16b //edge_idx = vandq_s8(edge_idx, au1_mask)
7750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7769cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    NEG         v17.16b, v24.16b            //sign_up = vnegq_s8(sign_down)
7779cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    EXT         v17.16b,  v17.16b ,  v17.16b,#15 //sign_up = vextq_s8(sign_up, sign_up, 15)
7780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    TBL         v24.8b, {v7.16b},v26.8b     //offset = vtbl1_s8(offset_tbl, vget_low_s8(edge_idx))
7809cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    Uxtl        v28.8h, v5.8b               //pi2_tmp_cur_row.val[0] = vreinterpretq_s16_u16(vmovl_u8(vget_low_u8(pu1_cur_row)))
7810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SADDW       v28.8h,  v28.8h ,  v24.8b   //pi2_tmp_cur_row.val[0] = vaddw_s8(pi2_tmp_cur_row.val[0], offset)
7820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SMAX        v28.8h,  v28.8h ,  v2.8h    //pi2_tmp_cur_row.val[0] = vmaxq_s16(pi2_tmp_cur_row.val[0], const_min_clip)
7830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    UMIN        v28.8h,  v28.8h ,  v4.8h    //pi2_tmp_cur_row.val[0] = vreinterpretq_s16_u16(vminq_u16(vreinterpretq_u16_s16(pi2_tmp_cur_row.val[0]), const_max_clip))
7840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    xtn         v30.8b,  v28.8h             //vmovn_s16(pi2_tmp_cur_row.val[0])
7860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         {v30.8b},[x0],x1            //vst1q_u8(pu1_src_cpy, pu1_cur_row)
7889cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy    mov         v5.16b, v16.16b             //pu1_cur_row = pu1_next_row
7890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x7,x7,#1
7900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         PU1_SRC_LOOP_RESIDUE
7910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x8,x17                      //Loads ht
7930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x5,sp,#0x42                 //*au1_src_left_tmp
7940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x2,x21                      //Loads *pu1_src_left
7960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x5,x5,#1
7970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
7980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x2,x2,#1
7990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarSRC_LEFT_LOOP_RESIDUE:
8010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w7,[x5,#1]!                 //au1_src_left_tmp[row]
8020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x8,x8,#1
8030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STRB        w7,[x2,#1]!                 //pu1_src_left[row] = au1_src_left_tmp[row]
8040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         SRC_LEFT_LOOP_RESIDUE
8050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarRE_ASSINING_LOOP:
8080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x8,x17                      //Loads ht
8090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x7,x16                      //Loads wd
8100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x0,x19                      //Loads *pu1_src
8120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x8,x8,#1                    //ht - 1
8130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    madd        x6, x8, x1, x7              //wd - 1 + (ht - 1) * src_strd
8150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STRB        w9,[x0]                     //pu1_src_org[0] = u1_pos_0_0_tmp
8160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x4,x24                      //Loads pu1_src_top_left
8180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x6,x0,x6                    //pu1_src[wd - 1 + (ht - 1) * src_strd]
8190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x12,sp,#0x02
8210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUB         x6,x6,#1
8220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STRB        w10,[x6]                    //pu1_src_org[wd - 1 + (ht - 1) * src_strd] = u1_pos_wd_ht_tmp
8230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x6,x6,#1
8240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w11,[sp]                    //load u1_src_top_left_tmp from stack pointer
8260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    MOV         x3,x22                      //Loads pu1_src_top
8270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STRB        w11,[x4]                    //*pu1_src_top_left = u1_src_top_left_tmp
8290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarSRC_TOP_LOOP:
8310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LD1         {v0.8b},[x12],#8            //pu1_src_top[col] = au1_src_top_tmp[col]
8320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x7,x7,#8                    //Decrement the width
8330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         {v0.8b},[x3],#8             //pu1_src_top[col] = au1_src_top_tmp[col]
8340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         SRC_TOP_LOOP
8350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarEND_LOOPS:
8370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         sp,sp,#0xA0
8380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    // LDMFD sp!,{x4-x12,x15}             //Reload the registers from SP
8390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ldp         x23, x24,[sp],#16
8400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ldp         x21, x22,[sp],#16
8410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ldp         x19, x20,[sp],#16
8429cbd70a2930875be59d7df68136ac9a1a949a13dNaveen Kumar Ponnusamy
8430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ret
8440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
8460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
847