static SYMBOL segEmitLabel( // EMIT SEGMENT LABEL PC_SEGMENT* seg ) // - current segment { SYMBOL label; // - label in segment label = seg->label; if( label != NULL && ! seg->lab_gened ) { if( seg->seg_id == SEG_STACK ) { CGAutoDecl( (cg_sym_handle)label, TY_UINT_1 ); } else { CgBackGenLabel( label ); } seg->lab_gened = TRUE; _markUsed( seg, TRUE ); } return label; }
void DgSymbolDefInit( // DATA GENERATE SYMBOL (DEFAULT DATA) SYMBOL sym ) // - the symbol { segment_id old_seg; // - old segment segment_id seg_id; // - symbol segment target_size_t size; // - size of symbol seg_id = FESegID( sym ); old_seg = BESetSeg( seg_id ); DgAlignSegment( seg_id, SegmentAlignment( sym->sym_type ) ); CgBackGenLabel( sym ); size = CgMemorySize( sym->sym_type ); if( sym->segid == SEG_BSS ) { DgUninitBytes( size ); } else { DgInitBytes( size, 0 ); } BESetSeg( old_seg ); }