File tree Expand file tree Collapse file tree 3 files changed +13
-0
lines changed
trick_source/codegen/Interface_Code_Gen Expand file tree Collapse file tree 3 files changed +13
-0
lines changed Original file line number Diff line number Diff line change @@ -443,6 +443,14 @@ void FieldDescription::setBitFieldWidth(unsigned int len) {
443443 bitfield_width = len ;
444444}
445445
446+ void FieldDescription::setBitFieldStart (unsigned int sb) {
447+ bitfield_start_bit = sb ;
448+ }
449+
450+ void FieldDescription::setBitFieldByteOffset (unsigned int wo) {
451+ bitfield_word_offset = wo ;
452+ }
453+
446454unsigned int FieldDescription::getBitFieldWidth () {
447455 return bitfield_width ;
448456}
Original file line number Diff line number Diff line change @@ -62,6 +62,8 @@ class FieldDescription : public ConstructValues {
6262 std::string getEnumString () ;
6363 void setBitField ( bool yes_no ) ;
6464 void setBitFieldWidth ( unsigned int len ) ;
65+ void setBitFieldStart ( unsigned int len ) ;
66+ void setBitFieldByteOffset ( unsigned int len ) ;
6567 unsigned int getBitFieldWidth () ;
6668 unsigned int getBitFieldStart () ;
6769 unsigned int getBitFieldByteOffset () ;
Original file line number Diff line number Diff line change @@ -215,6 +215,9 @@ bool FieldVisitor::VisitFieldDecl( clang::FieldDecl *field ) {
215215 if ( field->isBitField ()) {
216216 fdes->setBitField (true ) ;
217217 fdes->setBitFieldWidth (field->getBitWidthValue (field->getASTContext ())) ;
218+ unsigned int field_offset_bits = field->getASTContext ().getFieldOffset (field) + fdes->getBaseClassOffset () * 8 ;
219+ fdes->setBitFieldStart ( 32 - (field_offset_bits % 32 ) - fdes->getBitFieldWidth ()) ;
220+ fdes->setBitFieldByteOffset ((field_offset_bits / 32 ) * 4 ) ;
218221 }
219222
220223 if ( debug_level >= 3 ) {
You can’t perform that action at this time.
0 commit comments