forked from Github_Repos/cvw
		
	
		
			
				
	
	
		
			35 lines
		
	
	
		
			897 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			897 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| // fir.s
 | |
| // mmasserfrye@hmc.edu 30 January 2022
 | |
| // FIR filter
 | |
| 
 | |
| // a0 = N, a1 = M, a2 = &X, a3 = &c, a4 = &Y
 | |
| 
 | |
| .global fir
 | |
| 
 | |
| fir:
 | |
|     li t0, 0          # n = 0 = t0
 | |
|     slli t6, a0, 3    # N*8
 | |
|     slli t5, a1, 3    # M*8
 | |
|     addi t4, t5, -8   # (M-1)*8
 | |
| for1:
 | |
|     bge t0, t6, end   # exit outer for if n >= N
 | |
|     fmv.d.x f3, zero  # sum = 0 = f3
 | |
|     li t2, 0          # i = 0 = t2
 | |
|     add t1, t4, t0    # [(M-1) + n]*8
 | |
| for2:
 | |
|     bge t2, t5, for1end  # exit inner for if i >= M
 | |
|     sub t3, t1, t2    # [(M-1) + n - i]*8  
 | |
|     add t3, t3, a2    # t3 = offset + &X
 | |
|     fld f0, 0(t3)     # X[n-i+(M-1)] 
 | |
|     add t3, t2, a3    # t3 = offset + &c
 | |
|     fld f1, 0(t3)     # c[i] 
 | |
|     fmadd.d f3, f0, f1, f3  # sum += c[i]*X[n-i+(M-1)]
 | |
|     addi t2, t2, 8    # i++
 | |
|     j for2
 | |
| for1end:
 | |
|     add t3, t0, a4    # t3 = offset + &Y
 | |
|     fsd f3, 0(t3)     # Y[n] = sum
 | |
|     addi t0, t0, 8    # n++
 | |
|     j for1
 | |
| end:
 | |
|     ret |