@/*
@ ** Copyright 2003-2010, VisualOn, Inc.
@ **
@ ** Licensed under the Apache License, Version 2.0 (the "License");
@ ** you may not use this file except in compliance with the License.
@ ** You may obtain a copy of the License at
@ **
@ **     http://www.apache.org/licenses/LICENSE-2.0
@ **
@ ** Unless required by applicable law or agreed to in writing, software
@ ** distributed under the License is distributed on an "AS IS" BASIS,
@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ ** See the License for the specific language governing permissions and
@ ** limitations under the License.
@ */


@*void Convolve (
@*    Word16 x[],        /* (i)     : input vector                           */
@*    Word16 h[],        /* (i)     : impulse response                       */
@*    Word16 y[],        /* (o)     : output vector                          */
@*    Word16 L           /* (i)     : vector size                            */
@*)
@  r0 --- x[]
@  r1 --- h[]
@  r2 --- y[]
@  r3 --- L

	.section  .text
        .global   Convolve_asm

Convolve_asm:

        STMFD          r13!, {r4 - r12, r14}
        MOV            r3,  #0                           @ n
	MOV            r11, #0x8000

LOOP:
        ADD            r4, r1, r3, LSL #1                @ tmpH address
        ADD            r5, r3, #1                        @ i = n + 1
        MOV            r6, r0                            @ tmpX = x
        LDRSH          r9,  [r6], #2                     @ *tmpX++
        LDRSH          r10, [r4], #-2                    @ *tmpH--
        SUB            r5, r5, #1
        MUL            r8,  r9, r10

LOOP1:
        CMP            r5, #0
        BLE            L1
	LDRSH          r9,  [r6], #2                     @ *tmpX++
	LDRSH          r10, [r4], #-2                    @ *tmpH--
	LDRSH          r12, [r6], #2                     @ *tmpX++
	LDRSH          r14, [r4], #-2                    @ *tmpH--
	MLA            r8, r9, r10, r8
	MLA            r8, r12, r14, r8
	LDRSH          r9,  [r6], #2                     @ *tmpX++
	LDRSH          r10, [r4], #-2                    @ *tmpH--
	LDRSH          r12, [r6], #2                     @ *tmpX++
	LDRSH          r14, [r4], #-2                    @ *tmpH--
	MLA            r8, r9, r10, r8
        SUBS           r5, r5, #4
	MLA            r8, r12, r14, r8

        B              LOOP1

L1:

        ADD            r5, r11, r8, LSL #1
        MOV            r5, r5, LSR #16                   @extract_h(s)
        ADD            r3, r3, #1
        STRH           r5, [r2], #2                      @y[n]


        ADD            r4, r1, r3, LSL #1                @tmpH address
        ADD            r5, r3, #1
        MOV            r6, r0
        LDRSH          r9,  [r6], #2                     @ *tmpX++
        LDRSH          r10, [r4], #-2
        LDRSH          r12, [r6], #2
        LDRSH          r14, [r4], #-2

        MUL            r8, r9, r10
        SUB            r5, r5, #2
        MLA            r8, r12, r14, r8

LOOP2:
        CMP            r5, #0
        BLE            L2
	LDRSH          r9,  [r6], #2                     @ *tmpX++
	LDRSH          r10, [r4], #-2                    @ *tmpH--
	LDRSH          r12, [r6], #2                     @ *tmpX++
	LDRSH          r14, [r4], #-2                    @ *tmpH--
	MLA            r8, r9, r10, r8
	MLA            r8, r12, r14, r8
	LDRSH          r9,  [r6], #2                     @ *tmpX++
	LDRSH          r10, [r4], #-2                    @ *tmpH--
	LDRSH          r12, [r6], #2                     @ *tmpX++
	LDRSH          r14, [r4], #-2                    @ *tmpH--
	MLA            r8, r9, r10, r8
        SUBS           r5, r5, #4
	MLA            r8, r12, r14, r8
        B              LOOP2

L2:
        ADD            r8, r11, r8, LSL #1
        MOV            r8, r8, LSR #16                   @extract_h(s)
        ADD            r3, r3, #1
        STRH           r8, [r2], #2                      @y[n]

        ADD            r4, r1, r3, LSL #1
        ADD            r5, r3, #1
        MOV            r6, r0
        LDRSH          r9,  [r6], #2
        LDRSH          r10, [r4], #-2
        LDRSH          r12, [r6], #2
        LDRSH          r14, [r4], #-2
        MUL            r8, r9, r10
        LDRSH          r9,  [r6], #2
        LDRSH          r10, [r4], #-2
        MLA            r8, r12, r14, r8
        SUB            r5, r5, #3
        MLA            r8, r9, r10, r8

LOOP3:
        CMP            r5, #0
        BLE            L3
	LDRSH          r9,  [r6], #2                     @ *tmpX++
	LDRSH          r10, [r4], #-2                    @ *tmpH--
	LDRSH          r12, [r6], #2                     @ *tmpX++
	LDRSH          r14, [r4], #-2                    @ *tmpH--
	MLA            r8, r9, r10, r8
	MLA            r8, r12, r14, r8
	LDRSH          r9,  [r6], #2                     @ *tmpX++
	LDRSH          r10, [r4], #-2                    @ *tmpH--
	LDRSH          r12, [r6], #2                     @ *tmpX++
	LDRSH          r14, [r4], #-2                    @ *tmpH--
	MLA            r8, r9, r10, r8
        SUBS           r5, r5, #4
	MLA            r8, r12, r14, r8
        B              LOOP3

L3:
        ADD            r8, r11, r8, LSL #1
        MOV            r8, r8, LSR #16                   @extract_h(s)
        ADD            r3, r3, #1
        STRH           r8, [r2], #2                      @y[n]

        ADD            r5, r3, #1                        @ i = n + 1
        ADD            r4, r1, r3, LSL #1                @ tmpH address
        MOV            r6, r0
        MOV            r8, #0

LOOP4:
        CMP            r5, #0
        BLE            L4
	LDRSH          r9,  [r6], #2                     @ *tmpX++
	LDRSH          r10, [r4], #-2                    @ *tmpH--
	LDRSH          r12, [r6], #2                     @ *tmpX++
	LDRSH          r14, [r4], #-2                    @ *tmpH--
	MLA            r8, r9, r10, r8
	MLA            r8, r12, r14, r8
	LDRSH          r9,  [r6], #2                     @ *tmpX++
	LDRSH          r10, [r4], #-2                    @ *tmpH--
	LDRSH          r12, [r6], #2                     @ *tmpX++
	LDRSH          r14, [r4], #-2                    @ *tmpH--
	MLA            r8, r9, r10, r8
        SUBS           r5, r5, #4
	MLA            r8, r12, r14, r8
        B              LOOP4
L4:
        ADD            r5, r11, r8, LSL #1
        MOV            r5, r5, LSR #16                   @extract_h(s)
        ADD            r3, r3, #1
        STRH           r5, [r2], #2                      @y[n]

        CMP            r3, #64
        BLT            LOOP

Convolve_asm_end:

        LDMFD      r13!, {r4 - r12, r15}

        @ENDFUNC
        .end


