.set noreorder .set nobopt .ent sfzv .globl sfzv sfzv: .frame $sp, 0, $31 # $4 = output array # $5 = statelpc # $6 = sf_coeff li $12, 55 li $13, 2 vmtcr $vpw, $13 # vpw = 32 bits vmtcr $vlr0, $12 vfset $vf0 subu $12, $5, 20 # $12 = &(statelpc[-5]) vld.w $vr4, $12 # $vr4 = statelpc (elements 5-54 valid) li $12, 50 vmtcr $vlr0, $12 addiu $6, 4 vld.w $vr5, $6 # $vr5 = sf_coeff[1...50] li $12, 0 # $12 = k li $13, 5 # $13 = IDIM-k li $14, 50 li $15, 55 # $14 = LPC+IDIM-k li $8, 3 loop: vmtcr $vlr0, $15 vext.vv $vr6, $13, $vr4 # $vr6 = statelpc[5-k...54-k] vmtcr $vlr0, $14 vmul.s.vv $vr7, $vr5, $vr6 li $7, 48 vmtcr $vlr0, $7 li $7, 24 vext.vv $vr8, $7, $vr7 vmtcr $vlr0, $7 vext.vv $vr9, $0, $vr7 vadd.s.vv $vr10, $vr8, $vr9 li $7, 12 vext.vv $vr8, $7, $vr10 vmtcr $vlr0, $7 vext.vv $vr9, $0, $vr10 vadd.s.vv $vr10, $vr8, $vr9 li $7, 6 vext.vv $vr8, $7, $vr10 vmtcr $vlr0, $7 vext.vv $vr9, $0, $vr10 vadd.s.vv $vr10, $vr8, $vr9 li $7, 3 vext.vv $vr8, $7, $vr10 vmtcr $vlr0, $7 vext.vv $vr9, $0, $vr10 vadd.s.vv $vr10, $vr8, $vr9 li.s $f4, 0.0 li $7, 49 vext.s.sv $f5, $7, $vr7 sub.s $f4, $f4, $f5 li $7, 48 vext.s.sv $f5, $7, $vr7 sub.s $f4, $f4, $f5 li $7, 0 sumloop: vext.s.sv $f5, $7, $vr10 sub.s $f4, $f4, $f5 addi $7, 1 blt $7, $8, sumloop nop vins.s.sv $vr11, $12, $f4 addi $12, 1 addi $13, -1 addi $15, -1 vins.s.sv $vr4, $13, $f4 bgt $13, $0, loop nop li $12, 5 vmtcr $vlr0, $12 vst.w $vr11, $4 # store output[0...4] li $12, 55 vmtcr $vlr0, $12 vst.w $vr4, $5 # store statelpc[0...54] jr $31 nop .end sfzv