From 0f2f6da38f31c83e2305817c82c1375367d9a4df Mon Sep 17 00:00:00 2001 From: eck Date: Tue, 14 Aug 1990 09:59:37 +0000 Subject: [PATCH] fixed several bugs with object sizes --- lang/pc/comp/code.c | 8 ++++-- lang/pc/comp/desig.c | 58 +++++++++++++++++++++++++++++++------------- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/lang/pc/comp/code.c b/lang/pc/comp/code.c index 6880060ac..ebdfcc8e5 100644 --- a/lang/pc/comp/code.c +++ b/lang/pc/comp/code.c @@ -264,10 +264,14 @@ CodeEndBlock(df, StackAdjustment) C_cal("_nfa"); C_asp(word_size); } + if( tp->tp_size == word_size ) + C_lol(-tp->tp_size); if( tp->tp_size == 2 * word_size ) C_ldl(-tp->tp_size); - else - C_lol(-tp->tp_size); + else { + C_lal(-tp->tp_size); + C_loi(tp->tp_size); + } C_ret(tp->tp_size); } diff --git a/lang/pc/comp/desig.c b/lang/pc/comp/desig.c index 8744c075b..2aa96954f 100644 --- a/lang/pc/comp/desig.c +++ b/lang/pc/comp/desig.c @@ -164,12 +164,20 @@ CodeValue(ds, tp) break; case DSG_FIXED: - if( ds->dsg_offset % word_size == 0 && size == word_size ) { - if( ds->dsg_name ) - C_loe_dnam(ds->dsg_name, ds->dsg_offset); - else - C_lol(ds->dsg_offset); - break; + if( ds->dsg_offset % word_size == 0 ) { + if ( size == word_size ) { + if( ds->dsg_name ) + C_loe_dnam(ds->dsg_name, ds->dsg_offset); + else + 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 */ case DSG_PLOADED: @@ -209,12 +217,20 @@ CodeStore(ds, tp) switch( ds->dsg_kind ) { case DSG_FIXED: - if( ds->dsg_offset % word_size == 0 && size == word_size ) { - if( ds->dsg_name ) - C_ste_dnam(ds->dsg_name, ds->dsg_offset); - else - C_stl(ds->dsg_offset); - break; + if( ds->dsg_offset % word_size == 0 ) { + if ( size == word_size ) { + if( ds->dsg_name ) + C_ste_dnam(ds->dsg_name, ds->dsg_offset); + else + 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 */ case DSG_PLOADED: @@ -263,11 +279,19 @@ CodeAddress(ds) break; case DSG_PFIXED: - if( ds->dsg_name ) - C_loe_dnam(ds->dsg_name, ds->dsg_offset); - else - C_lol(ds->dsg_offset); - break; + if ( word_size == pointer_size ) { + if( ds->dsg_name ) + C_loe_dnam(ds->dsg_name, ds->dsg_offset); + else + 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: C_aar(word_size); -- 2.34.1