diff options
author | Pierre-Marie de Rodat <derodat@adacore.com> | 2015-12-17 14:09:55 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2015-12-17 14:09:55 +0000 |
commit | 2971780e404ebe8f3094c4d014b258b5c337959d (patch) | |
tree | 95d7a868396094336050add983f43966dd2afabf /gcc/dwarf2out.h | |
parent | eb59e42800b805e0bcced98ad2383c66a5839acc (diff) | |
download | gcc-2971780e404ebe8f3094c4d014b258b5c337959d.zip gcc-2971780e404ebe8f3094c4d014b258b5c337959d.tar.gz gcc-2971780e404ebe8f3094c4d014b258b5c337959d.tar.bz2 |
DWARF: add a language hook for fixed-point types
Support for fixed-point types in GCC is not powerful enough for Ada
fixed-point types: GNAT uses regular scalar types to implement them.
This new language hook makes it possible to output the desired debugging
information anyway.
gcc/ada/ChangeLog:
* gcc-interface/ada-tree.def (POWER_EXPR): New binary operation.
* gcc-interface/ada-tree.h (TYPE_FIXED_POINT_P): New macro.
(TYPE_IS_FIXED_POINT_P): New macro.
(TYPE_SCALE_FACTOR): New macro.
(SET_TYPE_SCALE_FACTOR): New macro.
* gcc-interface/decl.c: Include urealp.h
(gnat_to_gnu_entity): Attach trees to encode scale factors to
fixed-point types.
* gcc-interface/misc.c (gnat_print_type): Print scale factors
for fixed-point types.
(gnat_get_fixed_point_type_info): New.
(gnat_init_ts): Initialize data for the POWER_EXPR binary
operation.
(LANG_HOOKS_GET_FIXED_POINT_INFO): Redefine macro to implement
the get_fixed_point_type_info language hook.
gcc/ChangeLog:
* langhooks.h (struct lang_hooks_for_types): Add a
get_fixed_point_type_info field.
* langhooks-def.h (LANG_HOOKS_GET_FIXED_POINT_TYPE_INFO): New
macro.
(LANG_HOOKS_FOR_TYPES_INITIALIZER): Initialize the
get_fixed_point_type_info field.
* dwarf2out.h (enum fixed_point_scale_factor): New.
(struct fixed_point_type_info): New.
* dwarf2out.c (base_type_die): In DWARFv3 or non-strict DWARF
mode, get fixed-point type information using the debugging hook
and describe it in DWARF, if any.
From-SVN: r231764
Diffstat (limited to 'gcc/dwarf2out.h')
-rw-r--r-- | gcc/dwarf2out.h | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/dwarf2out.h b/gcc/dwarf2out.h index 7f4a24d..9173076 100644 --- a/gcc/dwarf2out.h +++ b/gcc/dwarf2out.h @@ -342,6 +342,35 @@ struct array_descr_info } dimen[10]; }; +enum fixed_point_scale_factor +{ + fixed_point_scale_factor_binary, + fixed_point_scale_factor_decimal, + fixed_point_scale_factor_arbitrary +}; + +struct fixed_point_type_info +{ + /* A scale factor is the value one has to multiply with physical data in + order to get the fixed point logical data. The DWARF standard enables one + to encode it in three ways. */ + enum fixed_point_scale_factor scale_factor_kind; + union + { + /* For binary scale factor, the scale factor is: 2 ** binary. */ + int binary; + /* For decimal scale factor, the scale factor is: 10 ** binary. */ + int decimal; + /* For arbitrary scale factor, the scale factor is: + numerator / denominator. */ + struct + { + unsigned HOST_WIDE_INT numerator; + HOST_WIDE_INT denominator; + } arbitrary; + } scale_factor; +}; + void dwarf2out_c_finalize (void); #endif /* GCC_DWARF2OUT_H */ |