Ejemplo n.º 1
0
void CgRtCallExecNoArgs(        // EXECUTE R/T CALL, WITHOUT ARGUMENTS
    RTF rt_code )               // - code for run/time call
{
    RT_DEF def;                 // - call definition

    CgRtCallInit( &def, rt_code );
    CgRtCallExecDone( &def );
}
Ejemplo n.º 2
0
static void rtRegister(         // REGISTER A FUNCTION BY R/T CALL
    SYMBOL rw,                  // - symbol for R/W block
    SYMBOL ro )                 // - symbol for R/O block
{
    RT_DEF def;                 // - R/T call control

    CgRtCallInit( &def, RTF_REG_FUN );
    CgRtParamAddrSym( &def, ro );
    CgRtParamAddrSym( &def, rw );
    CgRtCallExecDone( &def );
}
Ejemplo n.º 3
0
void CgDtorAll(                 // DTOR ALL IN FUNCTION
    void )
{
    RT_DEF def;                 // - call definition

    CgRtCallInit( &def, RTF_DTOR_ALL );
#if _CPU == _AXP
    CgRtParamAddrSym( &def, FstabExcRw() );
#endif
    CgRtCallExecDone( &def );
}
Ejemplo n.º 4
0
void CgDtorSe(                  // DTOR UNTIL SE ENTRY
    SE* bound )                 // - bounding entry
{
    RT_DEF def;                 // - call definition

    CgRtCallInit( &def, RTF_DTOR );
    CgRtParamConstOffset( &def, SeStateOptimal( bound ) );
#if _CPU == _AXP
    CgRtParamAddrSym( &def, FstabExcRw() );
#endif
    CgRtCallExecDone( &def );
}
Ejemplo n.º 5
0
void CgFunRegister(             // REGISTER A FUNCTION
    FN_CTL* fctl,               // - function information
    SYMBOL rw,                  // - symbol for R/W block
    SYMBOL ro )                 // - symbol for R/O block
{
    SE* se;                     // - current position

#if _CPU == _AXP
    CgAssignPtr( CgSymbolPlusOffset( rw, 0 ), CgAddrSymbol( ro ) );
    CompFlags.inline_fun_reg = TRUE;
#else
    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 ) {
        CompFlags.inline_fun_reg = TRUE;
        CgRtCallInit( &def, RTF_FS_PUSH );
        CgRtParamAddrSym( &def, rw );
        CgRtCallExecDone( &def );
        rw = registerHandler( rw, RTF_FS_HANDLER );
    } else {
        opt_thr = pointOptSym( &optFuncReg );
        if( opt_thr == NULL ) {
            rtRegister( rw, ro );
        } else {
            CompFlags.inline_fun_reg = TRUE;
            CgAssignPtr( CgSymbolPlusOffset( rw, 0 )
                       , CgFetchPtr( opt_thr ) );
            CgAssignPtr( CgSymbol( optFuncReg.sym )
                       , CgAddrSymbol( rw ) );
            rw = registerHandler( rw, RTF_FS_HANDLER_RTN );
        }
    }
    CgAssignPtr( CgSymbolPlusOffset
                    ( rw, CgbkInfo.size_data_ptr + CgbkInfo.size_fs_hand )
               , CgAddrSymbol( ro ) );
#endif
    if( fctl->is_dtor ) {
        se = BlkPosnCurr();
    } else {
        se = NULL;
    }
    FstabAssignStateVar( se );
}
Ejemplo n.º 6
0
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 ) ) );
        }
    }
}