コード例 #1
0
ファイル: fortran03-typeenviron.c プロジェクト: bsc-pm/mcxx
static void gfortran_7_or_less_array_descriptor_info(_size_t *size, _size_t *align, int rank)
{
    _size_t base_addr_size = CURRENT_CONFIGURATION->type_environment->sizeof_pointer;
    _size_t base_addr_align = CURRENT_CONFIGURATION->type_environment->alignof_pointer;

    _size_t offset_size = type_get_size(CURRENT_CONFIGURATION->type_environment->type_of_sizeof());
    _size_t offset_align = type_get_alignment(CURRENT_CONFIGURATION->type_environment->type_of_sizeof());

    _size_t dtype_size = type_get_size(CURRENT_CONFIGURATION->type_environment->type_of_ptrdiff_t());
    _size_t dtype_align = type_get_alignment(CURRENT_CONFIGURATION->type_environment->type_of_ptrdiff_t());

    _size_t descriptor_dimension_size = 3 * type_get_size(CURRENT_CONFIGURATION->type_environment->type_of_ptrdiff_t());
    _size_t descriptor_dimension_align = type_get_alignment(CURRENT_CONFIGURATION->type_environment->type_of_ptrdiff_t());

    _size_t dim_size = rank * descriptor_dimension_size;
    _size_t dim_align = descriptor_dimension_align;

    *size = base_addr_size + offset_size + dtype_size + dim_size;
    *align = MAX(base_addr_align, MAX(offset_align, MAX(dtype_align, MAX(dim_align, 0))));
}
 int Type::get_alignment_of()
 {
     return type_get_alignment(this->_type_info);
 }