Example #1
0
File: dec.c Project: wormt/bcc
void calc_type_size( struct type* type ) {
   int offset = 0;
   struct type_member* member = type->member;
   while ( member ) {
      if ( member->dim ) {
         calc_dim_size( member->dim, member->type );
         if ( member->dim->element_size ) {
            int size = member->dim->size * member->dim->element_size;
            type->size += size;
            member->offset = offset;
            offset += size;
         }
      }
      else if ( ! member->type->primitive ) {
         // Calculate the size of the type if it hasn't been already.
         if ( ! member->type->size ) {
            calc_type_size( member->type );
         }
         if ( member->type->size ) {
            type->size += member->type->size;
            member->offset = offset;
            offset += member->type->size;
         }
      }
      else {
         member->size = member->type->size;
         member->offset = offset;
         offset += member->type->size;
         type->size += member->size;
      }
      member = member->next;
   }
}
Example #2
0
File: dec.c Project: wormt/bcc
void calc_dim_size( struct dim* dim, struct type* type ) {
   if ( dim->next ) {
      calc_dim_size( dim->next, type );
      dim->element_size = dim->next->size * dim->next->element_size;
   }
   else {
      // Calculate the size of the element type.
      if ( ! type->size ) {
         calc_type_size( type );
      }
      dim->element_size = type->size;
   }
}
Example #3
0
int main() {
  int bits;

  signed long long int   slli = 1;
  signed long int         sli = 1;
  signed short int        ssi = 1;
  signed char              sc = 1;
  unsigned long long int ulli = 1;
  unsigned long int       uli = 1;
  unsigned short int      usi = 1;
  unsigned char            uc = 1;

  calc_type_size(sc);
  calc_assert(bits, sc);
  printf("       signed char: %3d bits\n", bits);

  calc_type_size(ssi);
  calc_assert(bits, ssi);
  printf("  signed short int: %3d bits\n", bits);

  calc_type_size(sli);
  calc_assert(bits, sli);
  printf("   signed long int: %3d bits\n", bits);

  calc_type_size(slli);
  calc_assert(bits, slli);
  printf("  signed long long: %3d bits\n", bits);

  calc_type_size(uc);
  calc_assert(bits, uc);
  printf("     unsigned char: %3d bits\n", bits);

  calc_type_size(usi);
  calc_assert(bits, usi);
  printf("unsigned short int: %3d bits\n", bits);

  calc_type_size(uli);
  calc_assert(bits, uli);
  printf(" unsigned long int: %3d bits\n", bits);

  calc_type_size(ulli);
  calc_assert(bits, ulli);
  printf("unsigned long long: %3d bits\n", bits);

  return 0;
}
Example #4
0
// Allocate a new vector type to memory.
vaddr_t TypeStore::alloc_vector(VMemory::Accessor& memory, vaddr_t element, unsigned int num) {
  picojson::object js_type;
  std::pair<size_t, unsigned int> type_size = calc_type_size(memory, element);

  js_type.insert(std::make_pair("program_type", Convert::int2json<uint8_t>(ProgramType::TYPE)));
  js_type.insert(std::make_pair("kind", Convert::int2json<uint8_t>(TypeKind::VECTOR)));
  js_type.insert(std::make_pair("size", Convert::int2json<unsigned int>(type_size.first * num)));
  js_type.insert(std::make_pair("alignment", Convert::int2json<unsigned int>(type_size.second)));
  js_type.insert(std::make_pair("element", Convert::vaddr2json(element)));
  js_type.insert(std::make_pair("num", Convert::int2json<unsigned int>(num)));

  vaddr_t addr = memory.reserve_program_area();
  memory.set_program_area(addr, picojson::value(js_type).serialize());

  return addr;
}
Example #5
0
File: dec.c Project: wormt/bcc
void s_calc_var_size( struct var* var ) {
   // Calculate the size of the variable elements.
   if ( var->dim ) {
      calc_dim_size( var->dim, var->type );
   }
   else {
      // Only calculate the size of the type if it hasn't been already.
      if ( ! var->type->size ) {
         calc_type_size( var->type );
      }
   }
   // Calculate the size of the variable.
   if ( var->dim ) {
      var->size = var->dim->size * var->dim->element_size;
   }
   else {
      var->size = var->type->size;
   }
}