1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * Rockchip VAD Preprocess 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2018 Fuzhou Rockchip Electronics Co., Ltd 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun .arch armv8-a 10*4882a593Smuzhiyun .file "vad_preprocess_arm64.S" 11*4882a593Smuzhiyun .text 12*4882a593Smuzhiyun .align 2 13*4882a593Smuzhiyun .global vad_preprocess_init 14*4882a593Smuzhiyun .type vad_preprocess_init, %function 15*4882a593Smuzhiyunvad_preprocess_init: 16*4882a593Smuzhiyun adrp x2, .LANCHOR0 17*4882a593Smuzhiyun add x1, x2, :lo12:.LANCHOR0 18*4882a593Smuzhiyun ldr w3, [x0, 8] 19*4882a593Smuzhiyun strh w3, [x2, #:lo12:.LANCHOR0] 20*4882a593Smuzhiyun ldr w2, [x0, 4] 21*4882a593Smuzhiyun strh w2, [x1, 2] 22*4882a593Smuzhiyun ldr w2, [x0, 12] 23*4882a593Smuzhiyun strh w2, [x1, 4] 24*4882a593Smuzhiyun ldr w2, [x0] 25*4882a593Smuzhiyun strh w2, [x1, 6] 26*4882a593Smuzhiyun ldr w2, [x0, 16] 27*4882a593Smuzhiyun and w0, w2, 511 28*4882a593Smuzhiyun tbz x2, 9, .L2 29*4882a593Smuzhiyun mvn w0, w0 30*4882a593Smuzhiyun.L2: 31*4882a593Smuzhiyun strh w0, [x1, 8] 32*4882a593Smuzhiyun ret 33*4882a593Smuzhiyun .size vad_preprocess_init, .-vad_preprocess_init 34*4882a593Smuzhiyun .align 2 35*4882a593Smuzhiyun .global vad_preprocess 36*4882a593Smuzhiyun .type vad_preprocess, %function 37*4882a593Smuzhiyunvad_preprocess: 38*4882a593Smuzhiyun adrp x4, .LANCHOR0 39*4882a593Smuzhiyun add x2, x4, :lo12:.LANCHOR0 40*4882a593Smuzhiyun mov w8, 15349 41*4882a593Smuzhiyun ldrsh w1, [x2, 8] 42*4882a593Smuzhiyun ldrsh w7, [x2, 10] 43*4882a593Smuzhiyun ldrsh w6, [x2, 12] 44*4882a593Smuzhiyun ldrsh w3, [x2, 16] 45*4882a593Smuzhiyun mul w0, w1, w0 46*4882a593Smuzhiyun mov w1, 32 47*4882a593Smuzhiyun sdiv w0, w0, w1 48*4882a593Smuzhiyun ldrsh w1, [x2, 14] 49*4882a593Smuzhiyun mov w2, -30697 50*4882a593Smuzhiyun mul w2, w7, w2 51*4882a593Smuzhiyun mul w5, w0, w8 52*4882a593Smuzhiyun sxtw x2, w2 53*4882a593Smuzhiyun add x2, x2, w5, sxtw 54*4882a593Smuzhiyun smaddl x3, w3, w8, x2 55*4882a593Smuzhiyun mov w2, -30632 56*4882a593Smuzhiyun smsubl x2, w6, w2, x3 57*4882a593Smuzhiyun mov w3, 14379 58*4882a593Smuzhiyun smsubl x1, w1, w3, x2 59*4882a593Smuzhiyun cmp x1, 0 60*4882a593Smuzhiyun ble .L5 61*4882a593Smuzhiyun add x1, x1, 8192 62*4882a593Smuzhiyun asr x1, x1, 14 63*4882a593Smuzhiyun.L6: 64*4882a593Smuzhiyun add x2, x4, :lo12:.LANCHOR0 65*4882a593Smuzhiyun sxth w1, w1 66*4882a593Smuzhiyun cmp w1, 0 67*4882a593Smuzhiyun ldrh w3, [x2, 18] 68*4882a593Smuzhiyun strh w0, [x2, 10] 69*4882a593Smuzhiyun add w3, w3, 1 70*4882a593Smuzhiyun ldr w0, [x2, 20] 71*4882a593Smuzhiyun sxth w3, w3 72*4882a593Smuzhiyun strh w1, [x2, 12] 73*4882a593Smuzhiyun csneg w1, w1, w1, ge 74*4882a593Smuzhiyun strh w3, [x2, 18] 75*4882a593Smuzhiyun negs w5, w3 76*4882a593Smuzhiyun add w0, w1, w0 77*4882a593Smuzhiyun strh w7, [x2, 16] 78*4882a593Smuzhiyun and w3, w3, 255 79*4882a593Smuzhiyun strh w6, [x2, 14] 80*4882a593Smuzhiyun and w5, w5, 255 81*4882a593Smuzhiyun str w0, [x2, 20] 82*4882a593Smuzhiyun csneg w3, w3, w5, mi 83*4882a593Smuzhiyun cbnz w3, .L7 84*4882a593Smuzhiyun ldr w3, [x2, 24] 85*4882a593Smuzhiyun cmp w3, 99 86*4882a593Smuzhiyun bgt .L8 87*4882a593Smuzhiyun add w0, w0, 128 88*4882a593Smuzhiyun mov w5, 256 89*4882a593Smuzhiyun add x2, x2, 32 90*4882a593Smuzhiyun sdiv w0, w0, w5 91*4882a593Smuzhiyun strh w0, [x2, w3, sxtw 1] 92*4882a593Smuzhiyun.L9: 93*4882a593Smuzhiyun add x2, x4, :lo12:.LANCHOR0 94*4882a593Smuzhiyun cmp w3, 99 95*4882a593Smuzhiyun ldrsh w0, [x2, 32] 96*4882a593Smuzhiyun bgt .L11 97*4882a593Smuzhiyun add x2, x2, 32 98*4882a593Smuzhiyun mov x5, 0 99*4882a593Smuzhiyun.L12: 100*4882a593Smuzhiyun add x5, x5, 1 101*4882a593Smuzhiyun cmp w3, w5 102*4882a593Smuzhiyun bgt .L13 103*4882a593Smuzhiyun.L14: 104*4882a593Smuzhiyun add x2, x4, :lo12:.LANCHOR0 105*4882a593Smuzhiyun mov w6, 230 106*4882a593Smuzhiyun add w3, w3, 1 107*4882a593Smuzhiyun ldrsh w5, [x2, 6] 108*4882a593Smuzhiyun strh wzr, [x2, 18] 109*4882a593Smuzhiyun stp wzr, w3, [x2, 20] 110*4882a593Smuzhiyun mul w5, w5, w6 111*4882a593Smuzhiyun mov w6, 26 112*4882a593Smuzhiyun add w5, w5, 128 113*4882a593Smuzhiyun madd w0, w0, w6, w5 114*4882a593Smuzhiyun mov w5, 256 115*4882a593Smuzhiyun sdiv w0, w0, w5 116*4882a593Smuzhiyun strh w0, [x2, 6] 117*4882a593Smuzhiyun.L7: 118*4882a593Smuzhiyun add x0, x4, :lo12:.LANCHOR0 119*4882a593Smuzhiyun ldrsh w3, [x4, #:lo12:.LANCHOR0] 120*4882a593Smuzhiyun ldrsh w2, [x0, 6] 121*4882a593Smuzhiyun ldrsh w5, [x0, 2] 122*4882a593Smuzhiyun madd w2, w2, w5, w3 123*4882a593Smuzhiyun cmp w1, w2 124*4882a593Smuzhiyun ble .L16 125*4882a593Smuzhiyun ldrh w1, [x0, 432] 126*4882a593Smuzhiyun add w1, w1, 1 127*4882a593Smuzhiyun sxth w1, w1 128*4882a593Smuzhiyun strh w1, [x0, 432] 129*4882a593Smuzhiyun ldrsh w0, [x0, 4] 130*4882a593Smuzhiyun cmp w0, w1 131*4882a593Smuzhiyun cset w0, lt 132*4882a593Smuzhiyun ret 133*4882a593Smuzhiyun.L5: 134*4882a593Smuzhiyun sub x1, x1, #8192 135*4882a593Smuzhiyun mov x2, 16384 136*4882a593Smuzhiyun sdiv x1, x1, x2 137*4882a593Smuzhiyun b .L6 138*4882a593Smuzhiyun.L8: 139*4882a593Smuzhiyun add x5, x2, 34 140*4882a593Smuzhiyun add x2, x2, 232 141*4882a593Smuzhiyun.L10: 142*4882a593Smuzhiyun ldrh w6, [x5] 143*4882a593Smuzhiyun add x5, x5, 2 144*4882a593Smuzhiyun strh w6, [x5, -4] 145*4882a593Smuzhiyun cmp x2, x5 146*4882a593Smuzhiyun bne .L10 147*4882a593Smuzhiyun add w0, w0, 128 148*4882a593Smuzhiyun mov w5, 256 149*4882a593Smuzhiyun add x2, x4, :lo12:.LANCHOR0 150*4882a593Smuzhiyun sdiv w0, w0, w5 151*4882a593Smuzhiyun strh w0, [x2, 230] 152*4882a593Smuzhiyun b .L9 153*4882a593Smuzhiyun.L13: 154*4882a593Smuzhiyun lsl x6, x5, 1 155*4882a593Smuzhiyun ldrsh w7, [x6, x2] 156*4882a593Smuzhiyun ldrh w6, [x6, x2] 157*4882a593Smuzhiyun cmp w7, w0 158*4882a593Smuzhiyun csel w0, w6, w0, le 159*4882a593Smuzhiyun sxth w0, w0 160*4882a593Smuzhiyun b .L12 161*4882a593Smuzhiyun.L11: 162*4882a593Smuzhiyun add x5, x2, 34 163*4882a593Smuzhiyun add x2, x2, 232 164*4882a593Smuzhiyun.L15: 165*4882a593Smuzhiyun ldrsh w7, [x5] 166*4882a593Smuzhiyun ldrh w6, [x5], 2 167*4882a593Smuzhiyun cmp w7, w0 168*4882a593Smuzhiyun csel w0, w6, w0, le 169*4882a593Smuzhiyun cmp x2, x5 170*4882a593Smuzhiyun sxth w0, w0 171*4882a593Smuzhiyun bne .L15 172*4882a593Smuzhiyun b .L14 173*4882a593Smuzhiyun.L16: 174*4882a593Smuzhiyun strh wzr, [x0, 432] 175*4882a593Smuzhiyun mov w0, 0 176*4882a593Smuzhiyun ret 177*4882a593Smuzhiyun .size vad_preprocess, .-vad_preprocess 178*4882a593Smuzhiyun .align 2 179*4882a593Smuzhiyun .global vad_preprocess_destroy 180*4882a593Smuzhiyun .type vad_preprocess_destroy, %function 181*4882a593Smuzhiyunvad_preprocess_destroy: 182*4882a593Smuzhiyun adrp x0, .LANCHOR0 183*4882a593Smuzhiyun add x0, x0, :lo12:.LANCHOR0 184*4882a593Smuzhiyun add x2, x0, 32 185*4882a593Smuzhiyun mov x1, 0 186*4882a593Smuzhiyun strh wzr, [x0, 10] 187*4882a593Smuzhiyun strh wzr, [x0, 16] 188*4882a593Smuzhiyun strh wzr, [x0, 12] 189*4882a593Smuzhiyun strh wzr, [x0, 14] 190*4882a593Smuzhiyun strh wzr, [x0, 18] 191*4882a593Smuzhiyun strh wzr, [x0, 432] 192*4882a593Smuzhiyun.L21: 193*4882a593Smuzhiyun strh wzr, [x1, x2] 194*4882a593Smuzhiyun add x1, x1, 2 195*4882a593Smuzhiyun cmp x1, 200 196*4882a593Smuzhiyun bne .L21 197*4882a593Smuzhiyun mov w1, 32 198*4882a593Smuzhiyun strh wzr, [x0, 6] 199*4882a593Smuzhiyun strh w1, [x0, 8] 200*4882a593Smuzhiyun stp wzr, wzr, [x0, 20] 201*4882a593Smuzhiyun ret 202*4882a593Smuzhiyun .size vad_preprocess_destroy, .-vad_preprocess_destroy 203*4882a593Smuzhiyun .align 2 204*4882a593Smuzhiyun .global vad_preprocess_update_params 205*4882a593Smuzhiyun .type vad_preprocess_update_params, %function 206*4882a593Smuzhiyunvad_preprocess_update_params: 207*4882a593Smuzhiyun adrp x1, .LANCHOR0+6 208*4882a593Smuzhiyun ldrsh w1, [x1, #:lo12:.LANCHOR0+6] 209*4882a593Smuzhiyun str w1, [x0] 210*4882a593Smuzhiyun ret 211*4882a593Smuzhiyun .size vad_preprocess_update_params, .-vad_preprocess_update_params 212*4882a593Smuzhiyun .bss 213*4882a593Smuzhiyun .align 3 214*4882a593Smuzhiyun .set .LANCHOR0,. + 0 215*4882a593Smuzhiyun .type g_sound_thd, %object 216*4882a593Smuzhiyun .size g_sound_thd, 2 217*4882a593Smuzhiyung_sound_thd: 218*4882a593Smuzhiyun .zero 2 219*4882a593Smuzhiyun .type g_noise_level, %object 220*4882a593Smuzhiyun .size g_noise_level, 2 221*4882a593Smuzhiyung_noise_level: 222*4882a593Smuzhiyun .zero 2 223*4882a593Smuzhiyun .type g_vad_con_thd, %object 224*4882a593Smuzhiyun .size g_vad_con_thd, 2 225*4882a593Smuzhiyung_vad_con_thd: 226*4882a593Smuzhiyun .zero 2 227*4882a593Smuzhiyun .type g_noise_abs, %object 228*4882a593Smuzhiyun .size g_noise_abs, 2 229*4882a593Smuzhiyung_noise_abs: 230*4882a593Smuzhiyun .zero 2 231*4882a593Smuzhiyun .type g_signal_gain, %object 232*4882a593Smuzhiyun .size g_signal_gain, 2 233*4882a593Smuzhiyung_signal_gain: 234*4882a593Smuzhiyun .zero 2 235*4882a593Smuzhiyun .type g_xn_1, %object 236*4882a593Smuzhiyun .size g_xn_1, 2 237*4882a593Smuzhiyung_xn_1: 238*4882a593Smuzhiyun .zero 2 239*4882a593Smuzhiyun .type g_yn_1, %object 240*4882a593Smuzhiyun .size g_yn_1, 2 241*4882a593Smuzhiyung_yn_1: 242*4882a593Smuzhiyun .zero 2 243*4882a593Smuzhiyun .type g_yn_2, %object 244*4882a593Smuzhiyun .size g_yn_2, 2 245*4882a593Smuzhiyung_yn_2: 246*4882a593Smuzhiyun .zero 2 247*4882a593Smuzhiyun .type g_xn_2, %object 248*4882a593Smuzhiyun .size g_xn_2, 2 249*4882a593Smuzhiyung_xn_2: 250*4882a593Smuzhiyun .zero 2 251*4882a593Smuzhiyun .type g_sample_cnt, %object 252*4882a593Smuzhiyun .size g_sample_cnt, 2 253*4882a593Smuzhiyung_sample_cnt: 254*4882a593Smuzhiyun .zero 2 255*4882a593Smuzhiyun .type g_sum_abs_frm, %object 256*4882a593Smuzhiyun .size g_sum_abs_frm, 4 257*4882a593Smuzhiyung_sum_abs_frm: 258*4882a593Smuzhiyun .zero 4 259*4882a593Smuzhiyun .type frm_count, %object 260*4882a593Smuzhiyun .size frm_count, 4 261*4882a593Smuzhiyunfrm_count: 262*4882a593Smuzhiyun .zero 4 263*4882a593Smuzhiyun .zero 4 264*4882a593Smuzhiyun .type g_ave_abs_rec, %object 265*4882a593Smuzhiyun .size g_ave_abs_rec, 400 266*4882a593Smuzhiyung_ave_abs_rec: 267*4882a593Smuzhiyun .zero 400 268*4882a593Smuzhiyun .type g_vad_cnt, %object 269*4882a593Smuzhiyun .size g_vad_cnt, 2 270*4882a593Smuzhiyung_vad_cnt: 271*4882a593Smuzhiyun .zero 2 272*4882a593Smuzhiyun .ident "GCC: (Linaro GCC 6.3-2017.05) 6.3.1 20170404" 273*4882a593Smuzhiyun .section .note.GNU-stack,"",@progbits 274