This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch 1/4] change specific int128 -> generic intN


> gcc/
> 	* cppbuiltin.c (define_builtin_macros_for_type_sizes): Round
> 	pointer size up to a power of two.
> 	* defaults.h (DWARF2_ADDR_SIZE): Round up.
> 	(POINTER_SIZE_UNITS): New, rounded up value.
> 	* dwarf2asm.c (size_of_encoded_value): Use it.
> 	(dw2_output_indirect_constant_1): Likewise.
> 	* expmed.c (init_expmed_one_conv): We now know the sizes of
> 	partial int modes.
> 	* loop-iv.c (iv_number_of_iterations): Use precision, not size.
> 	* optabs.c (expand_float): Use precision, not size.
> 	(expand_fix): Likewise.
> 	* simplify-rtx (simplify_unary_operation_1): Likewise.
> 	* tree-dfa.c (get_ref_base_and_extent): Likewise.
> 	* varasm.c (assemble_addr_to_section): Round up pointer sizes.
> 	(default_assemble_integer) Likewise.
> 	(dump_tm_clone_pairs): Likewise.
> 	* tree-core.c: Adjust comment.

No stor-layout.c listed here but...

> Index: gcc/stor-layout.c
> ===================================================================
> --- gcc/stor-layout.c	(revision 211858)
> +++ gcc/stor-layout.c	(working copy)
> @@ -2123,13 +2142,13 @@ layout_type (tree type)
> 
>      case BOOLEAN_TYPE:
>      case INTEGER_TYPE:
>      case ENUMERAL_TYPE:
>        SET_TYPE_MODE (type,
>  		     smallest_mode_for_size (TYPE_PRECISION (type), MODE_INT));
> -      TYPE_SIZE (type) = bitsize_int (GET_MODE_BITSIZE (TYPE_MODE (type)));
> +      TYPE_SIZE (type) = bitsize_int (GET_MODE_PRECISION (TYPE_MODE
> (type))); TYPE_SIZE_UNIT (type) = size_int (GET_MODE_SIZE (TYPE_MODE
> (type))); break;

This doesn't look correct, you might end up with types smaller than their 
modes and breaking the TYPE_SIZE/TYPE_SIZE_UNIT relationship.

> @@ -2516,16 +2535,33 @@ initialize_sizetypes (void)
>      precision = LONG_TYPE_SIZE;
>    else if (strcmp (SIZETYPE, "long long unsigned int") == 0)
>      precision = LONG_LONG_TYPE_SIZE;
>    else if (strcmp (SIZETYPE, "short unsigned int") == 0)
>      precision = SHORT_TYPE_SIZE;
>    else
>     gcc_unreachable ();
> 
>    bprecision
> -    = MIN (precision + BITS_PER_UNIT_LOG + 1, MAX_FIXED_MODE_SIZE);
> +    = MIN (precision, MAX_FIXED_MODE_SIZE);
>    bprecision
>      = GET_MODE_PRECISION (smallest_mode_for_size (bprecision, MODE_INT));
>    if (bprecision > HOST_BITS_PER_DOUBLE_INT)
>      bprecision = HOST_BITS_PER_DOUBLE_INT;
> 
>    /* Create stubs for sizetype and bitsizetype so we can create constants. 

Why are you reducing the precision here?

-- 
Eric Botcazou


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]