/* This C language subroutine performs a stochastic gradient update on its input. The Run Time Library for the C Language. Gordon A. Sterling (617) 461 - 3076 DSP Development Tools Engineering Created on 6/26/90 Updated on 5/94 by AS #include
fract xsgu( fract error, fract beta, \ fract pm coeff[], \ fract state[], int taps); float sgu( float error, float beta, \ float pm coeff[], \ float state[], int taps); */ #include "lib_glob.h" #include "trn_glob.h" .SEGMENT/CODE Code_Space_Name; .FILE RTL_FILENAME; /* Removed fract parts for now */ .GLOBAL _sgu; _sgu: put(R10); readparam4(dm_ptr); /*Read state pointer*/ pm_ptr=R12; R0=DM(dm_ptr,1); /*Fetch delay pointer*/ dm_bse=dm_ptr; /*Point to base of circular array*/ readparam5(R1); /*Read taps*/ F4=F4*F8, dm_lnt=R1; R1=R1-1, dm_ptr=R0; R1=R1-1, F0=DM(dm_ptr,dm_1);/*R4= Error * Beta*/ F2=F0*F4, F0=DM(dm_ptr,dm_1), F12=PM(pm_ptr,pm_1); LCNTR=R1, DO adapt UNTIL LCE; F10=F0*F4, F1=F10+F12, F0=DM(dm_ptr,dm_1), F12=PM(pm_ptr,pm_1); adapt: F1=F10+F12, PM(-2,pm_ptr)=F1; F10=F0*F4, PM(-1,pm_ptr)=F1; F1=F10+F12; F0=PASS F8, PM(pm_ptr,0)=F1; FETCH_RETURN restore_state: get(R10,1); RETURN (DB); RESTORE_STACK RESTORE_FRAME _xsgu: put(R10); pm_ptr=R12; readparam4(dm_ptr); readparam5(R1); R0=DM(dm_ptr,dm_1); dm_bse=dm_ptr; R4=R4*R8 (SSFR), dm_lnt=R11; R1=R1-1, dm_ptr=R0; R1=R1-1, R0=DM(dm_ptr,dm_1);/*R4 = Error * Beta*/ R10=R0*R4 (SSFR), R0=DM(dm_ptr,dm_1), R12=PM(pm_ptr,pm_1); LCNTR=R1, DO xadapt UNTIL LCE; R10=R0*R4 (SSFR), R1=R10+R12, R0=DM(dm_ptr,dm_1), R12=PM(pm_ptr,pm_1); xadapt: R1=R10+R12, PM(-2,pm_ptr)=R1; R10=R0*R4 (SSFR), PM(-1,pm_ptr)=R1; R1=R10+R12; JUMP (PC, restore_state) (DB); R0=PASS R8, PM(pm_ptr,0)=R1; FETCH_RETURN .ENDSEG;