/* This C language subroutine computes the absolute value of its complex floating point input. The Run Time Library for the C Language. Gordon A. Sterling (617) 461 - 3076 DSP Development Tools Engineering Created on 6/27/93 Updated on 5/94 by AS #include
float cabsf(__complex float x); */ #include "lib_glob.h" #include "mth_glob.h" #include "dspcglob.h" .SEGMENT/CODE Code_Space_Name; .FILE RTL_FILENAME; .GLOBAL _cabsf; _cabsf: put(R7); put(R9); put(R11); reads(R9, 1); /* Read real part */ F9=ABS F9, reads(R1, 2);/* Read imag part */ F1=ABS F1, F0=F9; IF EQ JUMP (PC, restore_state) (DB); FETCH_RETURN nop; F9=PASS F9, F0=F1; IF EQ JUMP (PC, restore_state) (DB); FETCH_RETURN nop; COMP(F9,F1); /* Check for larger component */ IF GT JUMP (PC, __big_imag); CALL (PC, ___float_divide) (DB); F7=PASS F9, F12=F1; F11=2.0; F4=F7*F7, CALLER_HOLD(R1) F7=1.0; F4=F4+F7, CALLER_SWAP RTLCALL _sqrtf (DB); SAVE_OLD_FRAME(R1) label_1: SAVE_RET_ADDR JUMP (PC, restore_state) (DB); F0=F0*F1; FETCH_RETURN __big_imag: CALL (PC, ___float_divide) (DB); F7=PASS F1, F12=F9; F11=2.0; F4=F7*F7, CALLER_HOLD(R1) F7=1.0; F4=F4+F7, CALLER_SWAP RTLCALL _sqrtf (DB); SAVE_OLD_FRAME(R1) label_2: SAVE_RET_ADDR F0=F0*F9, FETCH_RETURN restore_state: get(R11,1); get(R9,2); get(R7,3); RETURN (DB); RESTORE_STACK RESTORE_FRAME .ENDSEG;