V10/cmd/cfront/ooptcfront/dcl2.hmm
*** /tmp/,RCSt1a13342 Tue Nov 7 13:12:12 1989
--- /tmp/,RCSt2a13342 Tue Nov 7 13:12:14 1989
***************
*** 2,8 ****
/*ident "@(#)ctrans:src/dcl2.c 1.3.4.21" */
/*
$Source: /usr3/lang/benson/work/stripped_cfront/O/RCS/dcl2.c,v $ $RCSfile: dcl2.c,v $
! $Revision: 1.13 $ $Date: 89/10/20 14:27:49 $
$Author: benson $ $Locker: $
$State: Exp $
*/
--- 2,8 ----
/*ident "@(#)ctrans:src/dcl2.c 1.3.4.21" */
/*
$Source: /usr3/lang/benson/work/stripped_cfront/O/RCS/dcl2.c,v $ $RCSfile: dcl2.c,v $
! $Revision: 1.14 $ $Date: 89/10/26 16:49:46 $
$Author: benson $ $Locker: $
$State: Exp $
*/
***************
*** 1221,1226 ****
--- 1221,1228 ----
d = 0;
}
+ extern int ZB_BOUNDARY;
+
void
name::field_align()
/*
***************
*** 1229,1250 ****
{
Pbase fld = (Pbase) tp;
! int a = (F_SENSITIVE) ? fld->b_fieldtype->align() : SZ_WORD;
if (max_align < a)
max_align = a;
if (fld->b_bits == 0) { /* # force word alignment # */
int b;
! if (bit_offset)
! fld->b_bits = BI_IN_WORD - bit_offset;
! else if (b = byte_offset % SZ_WORD)
fld->b_bits = b * BI_IN_BYTE;
/* # else # */
/* # fld->b_bits = BI_IN_WORD; # */
! if (max_align < SZ_WORD)
! max_align = SZ_WORD;
} else if (bit_offset == 0) { /* # take care of part of word # */
! int b = byte_offset % SZ_WORD;
if (b) {
byte_offset -= b;
bit_offset = b * BI_IN_BYTE;
--- 1231,1253 ----
{
Pbase fld = (Pbase) tp;
! int a;
! a = (F_SENSITIVE) ? fld->b_fieldtype->align() : ZB_BOUNDARY;
if (max_align < a)
max_align = a;
if (fld->b_bits == 0) { /* # force word alignment # */
int b;
! if (bit_offset && bit_offset != ZB_BOUNDARY * BI_IN_BYTE)
! fld->b_bits = (BI_IN_BYTE * ZB_BOUNDARY) - bit_offset;
! else if (b = byte_offset % ZB_BOUNDARY)
fld->b_bits = b * BI_IN_BYTE;
/* # else # */
/* # fld->b_bits = BI_IN_WORD; # */
! if (max_align < ZB_BOUNDARY)
! max_align = ZB_BOUNDARY;
} else if (bit_offset == 0) { /* # take care of part of word # */
! int b = byte_offset % ZB_BOUNDARY;
if (b) {
byte_offset -= b;
bit_offset = b * BI_IN_BYTE;
***************
*** 1252,1257 ****
--- 1255,1261 ----
}
/*#error('d',"byteoff %d bitoff %d bits %d",byte_offset,bit_offset,fld->b_bits); #*/
int x = (bit_offset += fld->b_bits);
+
if (BI_IN_WORD < x) {
fld->b_offset = 0;
byte_offset += SZ_WORD;
***************
*** 1266,1276 ****
}
n_offset = byte_offset;
}
- static char rcsinfo[] = "$Header: /usr3/lang/benson/work/stripped_cfront/O/RCS/dcl2.c,v 1.13 89/10/20 14:27:49 benson Exp $";
/* $Log: dcl2.c,v $
* Revision 1.13 89/10/20 14:27:49 benson
* fixes to go with the error signalling stuff.
*
--- 1270,1287 ----
}
n_offset = byte_offset;
}
+ static char rcsinfo[] = "$Header: /usr3/lang/benson/work/stripped_cfront/O/RCS/dcl2.c,v 1.14 89/10/26 16:49:46 benson Exp $";
+
/* $Log: dcl2.c,v $
+ * Revision 1.14 89/10/26 16:49:46 benson
+ * fix bit offset layout. On the 68K (at least on a sun)
+ * the "word" for the purposes of bitfields is 32 bits, but
+ * it can begin on a 16 bit boundary. See size.c/h for the
+ * new size parameter, ZB_BOUNDARY.
+ *
* Revision 1.13 89/10/20 14:27:49 benson
* fixes to go with the error signalling stuff.
*