/* This C language subroutine computes the autocorrelation sequence of its floating point input. The Run Time Library for the C Language. Gordon A. Sterling (617) 461 - 3076 DSP Development Tools Engineering Created on 5/27/90 Updated on 5/94 by AS Fixed bug on 10/94 where R12 becomes F12 and then in the call to float divide, it gets altered. Saved value in dmc_i. AS #include
float autocorr(float out[], float in[],\ int samples, int lags); */ #include "lib_glob.h" #include "sts_glob.h" .SEGMENT/CODE Code_Space_Name; .FILE RTL_FILENAME; .GLOBAL _autocorr; _autocorr: put(R7); put(R11); R2=dma_i; put(R2); R2=dmb_i; put(R2); R2=dmc_i; F7=1.0; dmc_i=R12; /* Hold value */ CALL (PC, ___float_divide) (DB); F11=F7+F7, put(R2); F12=FLOAT R12, readparam4(R1); R12=dmc_i; /* Restore old value */ R11=PASS R8, dmc_i=R4; LCNTR=R1, DO lag_loop UNTIL LCE; R12=R12-1, dma_i=R11; R0=R0-R0, dmb_i=R8; F2=DM(dmb_i,1); F1=DM(dma_i,1); LCNTR=R12, DO element_loop UNTIL LCE; F1=F1*F2, F2=DM(dmb_i,1); element_loop: F0=F0+F1, F1=DM(dma_i,1); F1=F1*F2; F0=F0+F1; F0=F0*F7, FETCH_RETURN lag_loop: R11=R11+1, DM(dmc_i,1)=F0; restore_state: get(dmc_i,1); get(dmb_i,2); get(dma_i,3); R0=PASS R4, get(R11,4); get(R7,5); RETURN (DB); RESTORE_STACK RESTORE_FRAME .ENDSEG;