void CgFunDeregister( // DE-REGISTER A FUNCTION SYMBOL rw ) // - symbol for R/W block { RT_DEF def; // - R/T call control cg_name opt_thr; // - optimized expression for addr[THREAD_CTL] DbgVerify( CompFlags.rw_registration, "not R/W Registration" ); if( CompFlags.fs_registration ) { cg_name expr; CgRtCallInit( &def, RTF_FS_POP ); expr = CgSymbolPlusOffset( rw, 0 ); expr = CgFetchPtr( expr ); CgRtParam( expr, &def, TY_POINTER ); CgRtCallExecDone( &def ); } else { opt_thr = pointOptSym( (OPT_DEFN *)&optFuncReg ); if( opt_thr == NULL ) { CgRtCallExecNoArgs( RTF_DEREGISTER ); } else { CgAssignPtr( opt_thr, CgFetchPtr( CgSymbolPlusOffset( rw, 0 ) ) ); } } }
void CgRtParamAddrSym( // SET UP PARAMETER: ADDR( SYMBOL ) RT_DEF *def, // - definition for call SYMBOL sym ) // - symbol { CgRtParam( CgAddrSymbol( sym ), def, TY_POINTER ); }
void CgRtParamConstOffset( // SET UP PARAMETER: CONSTANT OFFSET RT_DEF *def, // - definition for call unsigned value ) // - parameter value { CgRtParam( CgOffset( value ), def, CgTypeOffset() ); }