本文整理匯總了C++中CGCall函數的典型用法代碼示例。如果您正苦於以下問題:C++ CGCall函數的具體用法?C++ CGCall怎麽用?C++ CGCall使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了CGCall函數的10個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: DoCmplxOp
void DoCmplxOp( RTCODE rtn_id, cg_name a, cg_name b, cg_name c, cg_name d ) {
//===========================================================================
// Do a complex operation.
call_handle handle;
cg_type typ;
cg_type r_typ;
typ = ResCGType( CGType( a ), CGType( c ) );
if( typ == TY_DOUBLE ) {
rtn_id += RT_C_DOUBLE;
r_typ = TY_DCOMPLEX;
} else if( typ == TY_LONGDOUBLE ) {
rtn_id += RT_C_EXTENDED;
r_typ = TY_XCOMPLEX;
} else {
r_typ = TY_COMPLEX;
}
handle = InitCall( rtn_id );
CGAddParm( handle, a, typ );
CGAddParm( handle, b, typ );
CGAddParm( handle, c, typ );
CGAddParm( handle, d, typ );
SplitCmplx( CGCall( handle ), r_typ );
}
示例2: DbSubscript
static void DbSubscript( sym_id arr ) {
//=========================================
// Generate call to debugging subscript routine.
act_dim_list *dim_ptr;
int dims_no;
int i;
call_handle call;
cg_name offset;
cg_name subscripts[MAX_DIM];
dim_ptr = arr->u.ns.si.va.u.dim_ext;
dims_no = _DimCount( dim_ptr->dim_flags );
call = InitCall( RT_SUBSCRIPT );
for( i = 0; i < dims_no; ++i ) {
subscripts[ i ] = GetTypedValue();
}
for( i = 1; i <= dims_no; ++i ) {
CGAddParm( call, subscripts[ dims_no - i ], TY_INT_4 );
}
CGAddParm( call, GetAdv( arr ), TY_LOCAL_POINTER );
CGAddParm( call, CGInteger( _DimCount( dim_ptr->dim_flags ), TY_INTEGER ), TY_INTEGER );
offset = CGUnary( O_POINTS, CGCall( call ), TY_INT_4 );
Index( arr, offset );
}
示例3: DoCmplxScalarOp
static void DoCmplxScalarOp( RTCODE rtn_id, cg_name a, cg_name b, cg_name s ) {
//=========================================================================
// Do a complex operation.
call_handle handle;
cg_type typ;
cg_type r_typ;
typ = CGType( a );
if( typ == TY_DOUBLE ) {
rtn_id += RT_C_DOUBLE;
r_typ = TY_DCOMPLEX;
} else if( typ == TY_LONGDOUBLE ) {
rtn_id += RT_C_EXTENDED;
r_typ = TY_XCOMPLEX;
} else {
r_typ = TY_COMPLEX;
}
handle = InitCall( rtn_id );
CGAddParm( handle, a, typ );
CGAddParm( handle, b, typ );
CGAddParm( handle, s, PromoteIntType( CGType( s ) ) );
SplitCmplx( CGCall( handle ), r_typ );
}
示例4: Concat
cg_name Concat( uint num_args, cg_name dest ) {
//=============================================
// Do concatenation operation.
int count;
call_handle call;
cg_name dest_1;
cg_name dest_2;
if( num_args & CAT_TEMP ) {
call = InitCall( RT_TCAT );
num_args &= ~CAT_TEMP;
} else if( num_args == 1 ) {
call = InitCall( RT_MOVE );
} else {
call = InitCall( RT_CAT );
}
count = num_args;
while( count > 0 ) {
CGAddParm( call, StkElement( count ), TY_LOCAL_POINTER );
--count;
}
PopStkElements( num_args );
CloneCGName( dest, &dest_1, &dest_2 );
CGAddParm( call, dest_1, TY_LOCAL_POINTER );
if( num_args != 1 ) {
CGAddParm( call, CGInteger( num_args, TY_UNSIGNED ), TY_UNSIGNED );
}
return( CGBinary( O_COMMA, CGCall( call ), dest_2, TY_LOCAL_POINTER ) );
}
示例5: FCSetFmt
void FCSetFmt( void ) {
//==================
// Set format string from FORMAT statement.
call_handle handle;
handle = InitCall( RT_SET_FMT );
CGAddParm( handle, CGBackName( (back_handle)GetStmtLabel( GetPtr() ), TY_POINTER ), TY_POINTER );
CGDone( CGCall( handle ) );
}
示例6: FCPassLabel
void FCPassLabel( void ) {
//=====================
// Pass label to run-time routine.
call_handle handle;
handle = InitCall( GetU16() );
CGAddParm( handle, CGBackName( (back_handle)GetLabel( GetU16() ), TY_POINTER ), TY_POINTER );
CGDone( CGCall( handle ) );
}
示例7: FCFmtAssign
void FCFmtAssign( void ) {
//=====================
// Set FORMAT string for:
// ASSIGN 10 TO I
// PRINT I, ...
// 10 FORMAT( ... )
call_handle handle;
handle = InitCall( RT_SET_FMT );
CGAddParm( handle, CGUnary( O_POINTS, SymAddr( GetPtr() ), TY_POINTER ), TY_POINTER );
CGDone( CGCall( handle ) );
}
示例8: FCSetLine
void FCSetLine( void ) {
//===================
// Generate run-time call to ISN routine.
call_handle handle;
unsigned_16 line_num;
line_num = GetU16();
if( ( SubProgId->ns.flags & SY_SUBPROG_TYPE ) == SY_BLOCK_DATA ) return;
handle = InitCall( RT_SET_LINE );
CGAddParm( handle, CGInteger( line_num, TY_INTEGER ), TY_INTEGER );
CGDone( CGCall( handle ) );
}
示例9: FCAdvFillHi
void FCAdvFillHi( void ) {
//=====================
// Fill hi bound of a dimension (actually computes # of elements in dimension).
sym_id arr;
act_dim_list *dim_ptr;
uint lo_size;
uint hi_size;
int hi_offset;
int ss;
cg_name num_elts;
cg_name hi;
cg_name adv;
call_handle call;
arr = GetPtr();
dim_ptr = arr->u.ns.si.va.u.dim_ext;
adv = GetAdv( arr );
hi_size = BETypeLength( TY_ADV_HI );
lo_size = BETypeLength( TY_ADV_LO );
ss = GetU16();
hi = GetTypedValue();
if( CGOpts & CGOPT_DI_CV ) {
hi_offset = _DimCount( dim_ptr->dim_flags ) * BETypeLength( TY_ADV_ENTRY );
if( Options & OPT_BOUNDS ) {
hi_offset += BETypeLength( TY_POINTER );
}
hi_offset += (ss - 1) * (lo_size + BETypeLength( TY_ADV_HI_CV )) + lo_size;
hi = CGAssign( StructRef( adv, hi_offset ), hi, TY_ADV_HI_CV );
adv = GetAdv( arr );
}
if( Options & OPT_BOUNDS ) {
call = InitCall( RT_ADV_FILL_HI );
CGAddParm( call, hi, TY_INT_4 );
CGAddParm( call, CGInteger( ss, TY_UNSIGNED ), TY_UNSIGNED );
CGAddParm( call, adv, TY_LOCAL_POINTER );
CGDone( CGUnary( O_POINTS, CGCall( call ), TY_INT_4 ) );
} else {
hi_offset = (ss - 1) * ( lo_size + hi_size ) + lo_size;
num_elts = CGBinary( O_PLUS, hi,
CGBinary( O_MINUS, CGInteger( 1, TY_INTEGER ),
LoBound( arr, ss - 1 ),
TY_ADV_HI ),
TY_ADV_HI );
CGDone( CGAssign( StructRef( adv, hi_offset ), num_elts, TY_ADV_HI ) );
}
}
示例10: Break
static void Break( RTCODE routine ) {
//=======================================
// Process PAUSE/STOP statement.
call_handle handle;
sym_id lit;
cg_name arg;
handle = InitCall( routine );
lit = GetPtr();
if( lit == NULL ) {
arg = CGInteger( 0, TY_LOCAL_POINTER );
} else {
arg = CGBackName( ConstBack( lit ), TY_LOCAL_POINTER );
}
CGAddParm( handle, arg, TY_LOCAL_POINTER );
CGDone( CGCall( handle ) );
}