fixed several bugs with object sizes

This commit is contained in:
eck 1990-08-14 09:59:37 +00:00
parent 36b11dc296
commit 0f2f6da38f
2 changed files with 47 additions and 19 deletions

View file

@ -264,10 +264,14 @@ CodeEndBlock(df, StackAdjustment)
C_cal("_nfa"); C_cal("_nfa");
C_asp(word_size); C_asp(word_size);
} }
if( tp->tp_size == word_size )
C_lol(-tp->tp_size);
if( tp->tp_size == 2 * word_size ) if( tp->tp_size == 2 * word_size )
C_ldl(-tp->tp_size); C_ldl(-tp->tp_size);
else else {
C_lol(-tp->tp_size); C_lal(-tp->tp_size);
C_loi(tp->tp_size);
}
C_ret(tp->tp_size); C_ret(tp->tp_size);
} }

View file

@ -164,12 +164,20 @@ CodeValue(ds, tp)
break; break;
case DSG_FIXED: case DSG_FIXED:
if( ds->dsg_offset % word_size == 0 && size == word_size ) { if( ds->dsg_offset % word_size == 0 ) {
if( ds->dsg_name ) if ( size == word_size ) {
C_loe_dnam(ds->dsg_name, ds->dsg_offset); if( ds->dsg_name )
else C_loe_dnam(ds->dsg_name, ds->dsg_offset);
C_lol(ds->dsg_offset); else
break; C_lol(ds->dsg_offset);
break;
} else if ( size == word_size * 2) {
if( ds->dsg_name )
C_lde_dnam(ds->dsg_name, ds->dsg_offset);
else
C_ldl(ds->dsg_offset);
break;
}
} }
/* Fall through */ /* Fall through */
case DSG_PLOADED: case DSG_PLOADED:
@ -209,12 +217,20 @@ CodeStore(ds, tp)
switch( ds->dsg_kind ) { switch( ds->dsg_kind ) {
case DSG_FIXED: case DSG_FIXED:
if( ds->dsg_offset % word_size == 0 && size == word_size ) { if( ds->dsg_offset % word_size == 0 ) {
if( ds->dsg_name ) if ( size == word_size ) {
C_ste_dnam(ds->dsg_name, ds->dsg_offset); if( ds->dsg_name )
else C_ste_dnam(ds->dsg_name, ds->dsg_offset);
C_stl(ds->dsg_offset); else
break; C_stl(ds->dsg_offset);
break;
} else if ( size == word_size * 2) {
if( ds->dsg_name )
C_sde_dnam(ds->dsg_name, ds->dsg_offset);
else
C_sdl(ds->dsg_offset);
break;
}
} }
/* Fall through */ /* Fall through */
case DSG_PLOADED: case DSG_PLOADED:
@ -263,11 +279,19 @@ CodeAddress(ds)
break; break;
case DSG_PFIXED: case DSG_PFIXED:
if( ds->dsg_name ) if ( word_size == pointer_size ) {
C_loe_dnam(ds->dsg_name, ds->dsg_offset); if( ds->dsg_name )
else C_loe_dnam(ds->dsg_name, ds->dsg_offset);
C_lol(ds->dsg_offset); else
break; C_lol(ds->dsg_offset);
break;
} else {
if( ds->dsg_name )
C_lde_dnam(ds->dsg_name, ds->dsg_offset);
else
C_ldl(ds->dsg_offset);
break;
}
case DSG_INDEXED: case DSG_INDEXED:
C_aar(word_size); C_aar(word_size);