Example #1
0
static void alignInSegment(     // PUT OUT ALIGNMENT WITHIN A SEGMENT
    target_size_t adjust,       // - adjustment
    fe_seg_id segid )           // - segment id
{
    if( adjust > 0 ) {
        if( segid == SEG_BSS ) {
            DgUninitBytes( adjust );
        } else {
            DgInitBytes( adjust, 0 );
        }
    }
}
Example #2
0
// This routine must be called to correspond to the AlignPad... macros in
// RTEXCEPT.H and CPPLIB.H
//
void DgAlignPad(                // INSERT PADDING IN A STRUCTURE
    unsigned total )            // - number of bytes emitted so far
{
    unsigned left;

#if ( _CPU == 8086 )
    #define ALIGN 2
#else
    #define ALIGN 4
#endif

    left = ( ( total + ALIGN - 1 ) & ( - ALIGN ) ) - total;
    if( left > 0 ) {
        DgUninitBytes( left );
    }
#undef ALIGN
}
Example #3
0
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 );
}