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 .syntax unified 10*4882a593Smuzhiyun .arch armv7-a 11*4882a593Smuzhiyun .fpu softvfp 12*4882a593Smuzhiyun .eabi_attribute 20, 1 13*4882a593Smuzhiyun .eabi_attribute 21, 1 14*4882a593Smuzhiyun .eabi_attribute 23, 3 15*4882a593Smuzhiyun .eabi_attribute 24, 1 16*4882a593Smuzhiyun .eabi_attribute 25, 1 17*4882a593Smuzhiyun .eabi_attribute 26, 2 18*4882a593Smuzhiyun .eabi_attribute 30, 4 19*4882a593Smuzhiyun .eabi_attribute 34, 1 20*4882a593Smuzhiyun .eabi_attribute 18, 4 21*4882a593Smuzhiyun .thumb 22*4882a593Smuzhiyun .file "vad_preprocess_thumb.S" 23*4882a593Smuzhiyun .text 24*4882a593Smuzhiyun .align 1 25*4882a593Smuzhiyun .global vad_preprocess_init 26*4882a593Smuzhiyun .thumb 27*4882a593Smuzhiyun .thumb_func 28*4882a593Smuzhiyun .type vad_preprocess_init, %function 29*4882a593Smuzhiyunvad_preprocess_init: 30*4882a593Smuzhiyun .fnstart 31*4882a593Smuzhiyun @ args = 0, pretend = 0, frame = 0 32*4882a593Smuzhiyun @ frame_needed = 0, uses_anonymous_args = 0 33*4882a593Smuzhiyun @ link register save eliminated. 34*4882a593Smuzhiyun ldr r2, .L4 35*4882a593Smuzhiyun ldr r3, [r0, #8] 36*4882a593Smuzhiyun strh r3, [r2] @ movhi 37*4882a593Smuzhiyun ldr r3, [r0, #4] 38*4882a593Smuzhiyun strh r3, [r2, #2] @ movhi 39*4882a593Smuzhiyun ldr r3, [r0, #12] 40*4882a593Smuzhiyun strh r3, [r2, #4] @ movhi 41*4882a593Smuzhiyun ldr r3, [r0] 42*4882a593Smuzhiyun strh r3, [r2, #6] @ movhi 43*4882a593Smuzhiyun ldr r3, [r0, #16] 44*4882a593Smuzhiyun tst r3, #512 45*4882a593Smuzhiyun ubfx r3, r3, #0, #9 46*4882a593Smuzhiyun itte ne 47*4882a593Smuzhiyun eorne r3, r3, #65280 48*4882a593Smuzhiyun eorne r3, r3, #255 49*4882a593Smuzhiyun uxtheq r3, r3 50*4882a593Smuzhiyun strh r3, [r2, #8] @ movhi 51*4882a593Smuzhiyun bx lr 52*4882a593Smuzhiyun.L5: 53*4882a593Smuzhiyun .align 2 54*4882a593Smuzhiyun.L4: 55*4882a593Smuzhiyun .word .LANCHOR0 56*4882a593Smuzhiyun .fnend 57*4882a593Smuzhiyun .size vad_preprocess_init, .-vad_preprocess_init 58*4882a593Smuzhiyun .align 1 59*4882a593Smuzhiyun .global vad_preprocess 60*4882a593Smuzhiyun .thumb 61*4882a593Smuzhiyun .thumb_func 62*4882a593Smuzhiyun .type vad_preprocess, %function 63*4882a593Smuzhiyunvad_preprocess: 64*4882a593Smuzhiyun .fnstart 65*4882a593Smuzhiyun @ args = 0, pretend = 0, frame = 0 66*4882a593Smuzhiyun @ frame_needed = 0, uses_anonymous_args = 0 67*4882a593Smuzhiyun ldr r3, .L29 68*4882a593Smuzhiyun movw r2, #34839 69*4882a593Smuzhiyun push {r4, r5, r6, r7, r8, r9, lr} 70*4882a593Smuzhiyun .save {r4, r5, r6, r7, r8, r9, lr} 71*4882a593Smuzhiyun movw r1, #15349 72*4882a593Smuzhiyun ldrsh r5, [r3, #8] 73*4882a593Smuzhiyun muls r0, r5, r0 74*4882a593Smuzhiyun ldrh r7, [r3, #10] 75*4882a593Smuzhiyun it mi 76*4882a593Smuzhiyun addmi r0, r0, #31 77*4882a593Smuzhiyun ldrh r4, [r3, #12] 78*4882a593Smuzhiyun asrs r0, r0, #5 79*4882a593Smuzhiyun ldrh r6, [r3, #14] 80*4882a593Smuzhiyun smulbb r2, r7, r2 81*4882a593Smuzhiyun mla r2, r1, r0, r2 82*4882a593Smuzhiyun smlabb r2, r4, r1, r2 83*4882a593Smuzhiyun movw r1, #34904 84*4882a593Smuzhiyun smulbb r1, r6, r1 85*4882a593Smuzhiyun ldrsh r4, [r3, #16] 86*4882a593Smuzhiyun subs r1, r2, r1 87*4882a593Smuzhiyun movw r2, #14379 88*4882a593Smuzhiyun mls r4, r4, r2, r1 89*4882a593Smuzhiyun cmp r4, #1 90*4882a593Smuzhiyun asr r5, r4, #31 91*4882a593Smuzhiyun sbcs r2, r5, #0 92*4882a593Smuzhiyun blt .L8 93*4882a593Smuzhiyun adds r4, r4, #8192 94*4882a593Smuzhiyun adc r5, r5, #0 95*4882a593Smuzhiyun b .L10 96*4882a593Smuzhiyun.L8: 97*4882a593Smuzhiyun subs r4, r4, #8192 98*4882a593Smuzhiyun adc r5, r5, #-1 99*4882a593Smuzhiyun cmp r4, #0 100*4882a593Smuzhiyun sbcs r2, r5, #0 101*4882a593Smuzhiyun bge .L10 102*4882a593Smuzhiyun movw r8, #16383 103*4882a593Smuzhiyun mov r9, #0 104*4882a593Smuzhiyun adds r4, r4, r8 105*4882a593Smuzhiyun adc r5, r5, r9 106*4882a593Smuzhiyun.L10: 107*4882a593Smuzhiyun lsrs r1, r4, #14 108*4882a593Smuzhiyun ldrh r4, [r3, #18] 109*4882a593Smuzhiyun orr r1, r1, r5, lsl #18 110*4882a593Smuzhiyun ldr r2, .L29+4 111*4882a593Smuzhiyun adds r4, r4, #1 112*4882a593Smuzhiyun strh r0, [r3, #10] @ movhi 113*4882a593Smuzhiyun uxth r1, r1 114*4882a593Smuzhiyun strh r1, [r3, #14] @ movhi 115*4882a593Smuzhiyun uxth r4, r4 116*4882a593Smuzhiyun strh r4, [r3, #18] @ movhi 117*4882a593Smuzhiyun sxth r1, r1 118*4882a593Smuzhiyun ldr r0, [r3, #20] 119*4882a593Smuzhiyun sxth r4, r4 120*4882a593Smuzhiyun cmp r1, #0 121*4882a593Smuzhiyun and r2, r2, r4 122*4882a593Smuzhiyun it lt 123*4882a593Smuzhiyun rsblt r1, r1, #0 124*4882a593Smuzhiyun cmp r2, #0 125*4882a593Smuzhiyun add r0, r0, r1 126*4882a593Smuzhiyun it lt 127*4882a593Smuzhiyun addlt r2, r2, #-1 128*4882a593Smuzhiyun strh r7, [r3, #12] @ movhi 129*4882a593Smuzhiyun it lt 130*4882a593Smuzhiyun ornlt r2, r2, #255 131*4882a593Smuzhiyun strh r6, [r3, #16] @ movhi 132*4882a593Smuzhiyun it lt 133*4882a593Smuzhiyun addlt r2, r2, #1 134*4882a593Smuzhiyun str r0, [r3, #20] 135*4882a593Smuzhiyun cmp r2, #0 136*4882a593Smuzhiyun bne .L11 137*4882a593Smuzhiyun ldr r4, [r3, #24] 138*4882a593Smuzhiyun ldr r2, .L29 139*4882a593Smuzhiyun cmp r4, #99 140*4882a593Smuzhiyun bgt .L13 141*4882a593Smuzhiyun adds r5, r0, #128 142*4882a593Smuzhiyun add r2, r2, r4, lsl #1 143*4882a593Smuzhiyun it mi 144*4882a593Smuzhiyun addwmi r5, r0, #383 145*4882a593Smuzhiyun asrs r5, r5, #8 146*4882a593Smuzhiyun strh r5, [r2, #28] @ movhi 147*4882a593Smuzhiyun b .L15 148*4882a593Smuzhiyun.L13: 149*4882a593Smuzhiyun add r5, r2, #28 150*4882a593Smuzhiyun adds r2, r2, #226 151*4882a593Smuzhiyun.L16: 152*4882a593Smuzhiyun ldrh r6, [r5, #2] 153*4882a593Smuzhiyun strh r6, [r5], #2 @ movhi 154*4882a593Smuzhiyun cmp r5, r2 155*4882a593Smuzhiyun bne .L16 156*4882a593Smuzhiyun adds r2, r0, #128 157*4882a593Smuzhiyun it mi 158*4882a593Smuzhiyun addwmi r2, r0, #383 159*4882a593Smuzhiyun ldr r0, .L29 160*4882a593Smuzhiyun asrs r2, r2, #8 161*4882a593Smuzhiyun strh r2, [r0, #226] @ movhi 162*4882a593Smuzhiyun.L15: 163*4882a593Smuzhiyun cmp r4, #99 164*4882a593Smuzhiyun ldrh r2, [r3, #28] 165*4882a593Smuzhiyun mov r0, #1 166*4882a593Smuzhiyun bgt .L18 167*4882a593Smuzhiyun ldr r5, .L29+8 168*4882a593Smuzhiyun.L19: 169*4882a593Smuzhiyun cmp r0, r4 170*4882a593Smuzhiyun bge .L21 171*4882a593Smuzhiyun ldrsh r6, [r5, r0, lsl #1] 172*4882a593Smuzhiyun sxth r2, r2 173*4882a593Smuzhiyun adds r0, r0, #1 174*4882a593Smuzhiyun cmp r2, r6 175*4882a593Smuzhiyun it ge 176*4882a593Smuzhiyun movge r2, r6 177*4882a593Smuzhiyun uxth r2, r2 178*4882a593Smuzhiyun b .L19 179*4882a593Smuzhiyun.L18: 180*4882a593Smuzhiyun ldr r6, .L29+8 181*4882a593Smuzhiyun.L22: 182*4882a593Smuzhiyun ldrsh r5, [r6, r0, lsl #1] 183*4882a593Smuzhiyun sxth r2, r2 184*4882a593Smuzhiyun adds r0, r0, #1 185*4882a593Smuzhiyun cmp r2, r5 186*4882a593Smuzhiyun it ge 187*4882a593Smuzhiyun movge r2, r5 188*4882a593Smuzhiyun cmp r0, #100 189*4882a593Smuzhiyun uxth r2, r2 190*4882a593Smuzhiyun bne .L22 191*4882a593Smuzhiyun.L21: 192*4882a593Smuzhiyun ldrh r5, [r3, #6] 193*4882a593Smuzhiyun movs r0, #128 194*4882a593Smuzhiyun movs r6, #230 195*4882a593Smuzhiyun adds r4, r4, #1 196*4882a593Smuzhiyun str r4, [r3, #24] 197*4882a593Smuzhiyun smlabb r0, r5, r6, r0 198*4882a593Smuzhiyun movs r5, #26 199*4882a593Smuzhiyun smlabb r2, r2, r5, r0 200*4882a593Smuzhiyun ldr r0, .L29 201*4882a593Smuzhiyun cmp r2, #0 202*4882a593Smuzhiyun it lt 203*4882a593Smuzhiyun addlt r2, r2, #255 204*4882a593Smuzhiyun asrs r2, r2, #8 205*4882a593Smuzhiyun strh r2, [r0, #6] @ movhi 206*4882a593Smuzhiyun movs r2, #0 207*4882a593Smuzhiyun str r2, [r3, #20] 208*4882a593Smuzhiyun strh r2, [r3, #18] @ movhi 209*4882a593Smuzhiyun.L11: 210*4882a593Smuzhiyun ldrh r0, [r3, #6] 211*4882a593Smuzhiyun ldrh r4, [r3, #2] 212*4882a593Smuzhiyun ldrsh r3, [r3] 213*4882a593Smuzhiyun ldr r2, .L29 214*4882a593Smuzhiyun smlabb r3, r0, r4, r3 215*4882a593Smuzhiyun cmp r1, r3 216*4882a593Smuzhiyun ble .L24 217*4882a593Smuzhiyun ldrh r3, [r2, #428] 218*4882a593Smuzhiyun ldrsh r0, [r2, #4] 219*4882a593Smuzhiyun adds r3, r3, #1 220*4882a593Smuzhiyun uxth r3, r3 221*4882a593Smuzhiyun strh r3, [r2, #428] @ movhi 222*4882a593Smuzhiyun sxth r3, r3 223*4882a593Smuzhiyun cmp r0, r3 224*4882a593Smuzhiyun ite ge 225*4882a593Smuzhiyun movge r0, #0 226*4882a593Smuzhiyun movlt r0, #1 227*4882a593Smuzhiyun pop {r4, r5, r6, r7, r8, r9, pc} 228*4882a593Smuzhiyun.L24: 229*4882a593Smuzhiyun movs r0, #0 230*4882a593Smuzhiyun strh r0, [r2, #428] @ movhi 231*4882a593Smuzhiyun pop {r4, r5, r6, r7, r8, r9, pc} 232*4882a593Smuzhiyun.L30: 233*4882a593Smuzhiyun .align 2 234*4882a593Smuzhiyun.L29: 235*4882a593Smuzhiyun .word .LANCHOR0 236*4882a593Smuzhiyun .word -2147483393 237*4882a593Smuzhiyun .word .LANCHOR0+28 238*4882a593Smuzhiyun .fnend 239*4882a593Smuzhiyun .size vad_preprocess, .-vad_preprocess 240*4882a593Smuzhiyun .align 1 241*4882a593Smuzhiyun .global vad_preprocess_destroy 242*4882a593Smuzhiyun .thumb 243*4882a593Smuzhiyun .thumb_func 244*4882a593Smuzhiyun .type vad_preprocess_destroy, %function 245*4882a593Smuzhiyunvad_preprocess_destroy: 246*4882a593Smuzhiyun .fnstart 247*4882a593Smuzhiyun @ args = 0, pretend = 0, frame = 0 248*4882a593Smuzhiyun @ frame_needed = 0, uses_anonymous_args = 0 249*4882a593Smuzhiyun movs r3, #0 250*4882a593Smuzhiyun ldr r2, .L34 251*4882a593Smuzhiyun push {r4, lr} 252*4882a593Smuzhiyun .save {r4, lr} 253*4882a593Smuzhiyun mov r4, r3 254*4882a593Smuzhiyun strh r3, [r2, #10] @ movhi 255*4882a593Smuzhiyun strh r3, [r2, #12] @ movhi 256*4882a593Smuzhiyun strh r3, [r2, #14] @ movhi 257*4882a593Smuzhiyun strh r3, [r2, #16] @ movhi 258*4882a593Smuzhiyun strh r3, [r2, #18] @ movhi 259*4882a593Smuzhiyun strh r3, [r2, #428] @ movhi 260*4882a593Smuzhiyun.L32: 261*4882a593Smuzhiyun ldr r2, .L34 262*4882a593Smuzhiyun movs r1, #0 263*4882a593Smuzhiyun add r0, r2, #28 264*4882a593Smuzhiyun strh r4, [r0, r3, lsl #1] @ movhi 265*4882a593Smuzhiyun adds r3, r3, #1 266*4882a593Smuzhiyun cmp r3, #100 267*4882a593Smuzhiyun bne .L32 268*4882a593Smuzhiyun movs r3, #32 269*4882a593Smuzhiyun str r1, [r2, #20] 270*4882a593Smuzhiyun strh r1, [r2, #6] @ movhi 271*4882a593Smuzhiyun strh r3, [r2, #8] @ movhi 272*4882a593Smuzhiyun str r1, [r2, #24] 273*4882a593Smuzhiyun pop {r4, pc} 274*4882a593Smuzhiyun.L35: 275*4882a593Smuzhiyun .align 2 276*4882a593Smuzhiyun.L34: 277*4882a593Smuzhiyun .word .LANCHOR0 278*4882a593Smuzhiyun .fnend 279*4882a593Smuzhiyun .size vad_preprocess_destroy, .-vad_preprocess_destroy 280*4882a593Smuzhiyun .align 1 281*4882a593Smuzhiyun .global vad_preprocess_update_params 282*4882a593Smuzhiyun .thumb 283*4882a593Smuzhiyun .thumb_func 284*4882a593Smuzhiyun .type vad_preprocess_update_params, %function 285*4882a593Smuzhiyunvad_preprocess_update_params: 286*4882a593Smuzhiyun .fnstart 287*4882a593Smuzhiyun @ args = 0, pretend = 0, frame = 0 288*4882a593Smuzhiyun @ frame_needed = 0, uses_anonymous_args = 0 289*4882a593Smuzhiyun @ link register save eliminated. 290*4882a593Smuzhiyun ldr r3, .L37 291*4882a593Smuzhiyun ldrsh r3, [r3, #6] 292*4882a593Smuzhiyun str r3, [r0] 293*4882a593Smuzhiyun bx lr 294*4882a593Smuzhiyun.L38: 295*4882a593Smuzhiyun .align 2 296*4882a593Smuzhiyun.L37: 297*4882a593Smuzhiyun .word .LANCHOR0 298*4882a593Smuzhiyun .fnend 299*4882a593Smuzhiyun .size vad_preprocess_update_params, .-vad_preprocess_update_params 300*4882a593Smuzhiyun .bss 301*4882a593Smuzhiyun .align 2 302*4882a593Smuzhiyun.LANCHOR0 = . + 0 303*4882a593Smuzhiyun .type g_sound_thd, %object 304*4882a593Smuzhiyun .size g_sound_thd, 2 305*4882a593Smuzhiyung_sound_thd: 306*4882a593Smuzhiyun .space 2 307*4882a593Smuzhiyun .type g_noise_level, %object 308*4882a593Smuzhiyun .size g_noise_level, 2 309*4882a593Smuzhiyung_noise_level: 310*4882a593Smuzhiyun .space 2 311*4882a593Smuzhiyun .type g_vad_con_thd, %object 312*4882a593Smuzhiyun .size g_vad_con_thd, 2 313*4882a593Smuzhiyung_vad_con_thd: 314*4882a593Smuzhiyun .space 2 315*4882a593Smuzhiyun .type g_noise_abs, %object 316*4882a593Smuzhiyun .size g_noise_abs, 2 317*4882a593Smuzhiyung_noise_abs: 318*4882a593Smuzhiyun .space 2 319*4882a593Smuzhiyun .type g_signal_gain, %object 320*4882a593Smuzhiyun .size g_signal_gain, 2 321*4882a593Smuzhiyung_signal_gain: 322*4882a593Smuzhiyun .space 2 323*4882a593Smuzhiyun .type g_xn_1, %object 324*4882a593Smuzhiyun .size g_xn_1, 2 325*4882a593Smuzhiyung_xn_1: 326*4882a593Smuzhiyun .space 2 327*4882a593Smuzhiyun .type g_xn_2, %object 328*4882a593Smuzhiyun .size g_xn_2, 2 329*4882a593Smuzhiyung_xn_2: 330*4882a593Smuzhiyun .space 2 331*4882a593Smuzhiyun .type g_yn_1, %object 332*4882a593Smuzhiyun .size g_yn_1, 2 333*4882a593Smuzhiyung_yn_1: 334*4882a593Smuzhiyun .space 2 335*4882a593Smuzhiyun .type g_yn_2, %object 336*4882a593Smuzhiyun .size g_yn_2, 2 337*4882a593Smuzhiyung_yn_2: 338*4882a593Smuzhiyun .space 2 339*4882a593Smuzhiyun .type g_sample_cnt, %object 340*4882a593Smuzhiyun .size g_sample_cnt, 2 341*4882a593Smuzhiyung_sample_cnt: 342*4882a593Smuzhiyun .space 2 343*4882a593Smuzhiyun .type g_sum_abs_frm, %object 344*4882a593Smuzhiyun .size g_sum_abs_frm, 4 345*4882a593Smuzhiyung_sum_abs_frm: 346*4882a593Smuzhiyun .space 4 347*4882a593Smuzhiyun .type frm_count, %object 348*4882a593Smuzhiyun .size frm_count, 4 349*4882a593Smuzhiyunfrm_count: 350*4882a593Smuzhiyun .space 4 351*4882a593Smuzhiyun .type g_ave_abs_rec, %object 352*4882a593Smuzhiyun .size g_ave_abs_rec, 400 353*4882a593Smuzhiyung_ave_abs_rec: 354*4882a593Smuzhiyun .space 400 355*4882a593Smuzhiyun .type g_vad_cnt, %object 356*4882a593Smuzhiyun .size g_vad_cnt, 2 357*4882a593Smuzhiyung_vad_cnt: 358*4882a593Smuzhiyun .space 2 359*4882a593Smuzhiyun .ident "GCC: (GNU) 4.9 20150123 (prerelease)" 360*4882a593Smuzhiyun .section .note.GNU-stack,"",%progbits 361