ef4bddc299
gcc/ada/ * gcc-interface/decl.c, gcc-interface/gigi.h, gcc-interface/misc.c, gcc-interface/trans.c, gcc-interface/utils.c, gcc-interface/utils2.c: Remove redundant enum from machine_mode. gcc/c-family/ * c-common.c, c-common.h, c-cppbuiltin.c, c-lex.c: Remove redundant enum from machine_mode. gcc/c/ * c-decl.c, c-tree.h, c-typeck.c: Remove redundant enum from machine_mode. gcc/cp/ * constexpr.c: Remove redundant enum from machine_mode. gcc/fortran/ * trans-types.c, trans-types.h: Remove redundant enum from machine_mode. gcc/go/ * go-lang.c: Remove redundant enum from machine_mode. gcc/java/ * builtins.c, java-tree.h, typeck.c: Remove redundant enum from machine_mode. gcc/lto/ * lto-lang.c: Remove redundant enum from machine_mode. gcc/ * addresses.h, alias.c, asan.c, auto-inc-dec.c, bt-load.c, builtins.c, builtins.h, caller-save.c, calls.c, calls.h, cfgexpand.c, cfgloop.h, cfgrtl.c, combine.c, compare-elim.c, config/aarch64/aarch64-builtins.c, config/aarch64/aarch64-protos.h, config/aarch64/aarch64-simd.md, config/aarch64/aarch64.c, config/aarch64/aarch64.h, config/aarch64/aarch64.md, config/alpha/alpha-protos.h, config/alpha/alpha.c, config/arc/arc-protos.h, config/arc/arc.c, config/arc/arc.h, config/arc/predicates.md, config/arm/aarch-common-protos.h, config/arm/aarch-common.c, config/arm/arm-protos.h, config/arm/arm.c, config/arm/arm.h, config/arm/arm.md, config/arm/neon.md, config/arm/thumb2.md, config/avr/avr-log.c, config/avr/avr-protos.h, config/avr/avr.c, config/avr/avr.md, config/bfin/bfin-protos.h, config/bfin/bfin.c, config/c6x/c6x-protos.h, config/c6x/c6x.c, config/c6x/c6x.md, config/cr16/cr16-protos.h, config/cr16/cr16.c, config/cris/cris-protos.h, config/cris/cris.c, config/cris/cris.md, config/darwin-protos.h, config/darwin.c, config/epiphany/epiphany-protos.h, config/epiphany/epiphany.c, config/epiphany/epiphany.md, config/fr30/fr30.c, config/frv/frv-protos.h, config/frv/frv.c, config/frv/predicates.md, config/h8300/h8300-protos.h, config/h8300/h8300.c, config/i386/i386-builtin-types.awk, config/i386/i386-protos.h, config/i386/i386.c, config/i386/i386.md, config/i386/predicates.md, config/i386/sse.md, config/i386/sync.md, config/ia64/ia64-protos.h, config/ia64/ia64.c, config/iq2000/iq2000-protos.h, config/iq2000/iq2000.c, config/iq2000/iq2000.md, config/lm32/lm32-protos.h, config/lm32/lm32.c, config/m32c/m32c-protos.h, config/m32c/m32c.c, config/m32r/m32r-protos.h, config/m32r/m32r.c, config/m68k/m68k-protos.h, config/m68k/m68k.c, config/mcore/mcore-protos.h, config/mcore/mcore.c, config/mcore/mcore.md, config/mep/mep-protos.h, config/mep/mep.c, config/microblaze/microblaze-protos.h, config/microblaze/microblaze.c, config/mips/mips-protos.h, config/mips/mips.c, config/mmix/mmix-protos.h, config/mmix/mmix.c, config/mn10300/mn10300-protos.h, config/mn10300/mn10300.c, config/moxie/moxie.c, config/msp430/msp430-protos.h, config/msp430/msp430.c, config/nds32/nds32-cost.c, config/nds32/nds32-intrinsic.c, config/nds32/nds32-md-auxiliary.c, config/nds32/nds32-protos.h, config/nds32/nds32.c, config/nios2/nios2-protos.h, config/nios2/nios2.c, config/pa/pa-protos.h, config/pa/pa.c, config/pdp11/pdp11-protos.h, config/pdp11/pdp11.c, config/rl78/rl78-protos.h, config/rl78/rl78.c, config/rs6000/altivec.md, config/rs6000/rs6000-c.c, config/rs6000/rs6000-protos.h, config/rs6000/rs6000.c, config/rs6000/rs6000.h, config/rx/rx-protos.h, config/rx/rx.c, config/s390/predicates.md, config/s390/s390-protos.h, config/s390/s390.c, config/s390/s390.h, config/s390/s390.md, config/sh/predicates.md, config/sh/sh-protos.h, config/sh/sh.c, config/sh/sh.md, config/sparc/predicates.md, config/sparc/sparc-protos.h, config/sparc/sparc.c, config/sparc/sparc.md, config/spu/spu-protos.h, config/spu/spu.c, config/stormy16/stormy16-protos.h, config/stormy16/stormy16.c, config/tilegx/tilegx-protos.h, config/tilegx/tilegx.c, config/tilegx/tilegx.md, config/tilepro/tilepro-protos.h, config/tilepro/tilepro.c, config/v850/v850-protos.h, config/v850/v850.c, config/v850/v850.md, config/vax/vax-protos.h, config/vax/vax.c, config/vms/vms-c.c, config/xtensa/xtensa-protos.h, config/xtensa/xtensa.c, coverage.c, cprop.c, cse.c, cselib.c, cselib.h, dbxout.c, ddg.c, df-problems.c, dfp.c, dfp.h, doc/md.texi, doc/rtl.texi, doc/tm.texi, doc/tm.texi.in, dojump.c, dse.c, dwarf2cfi.c, dwarf2out.c, dwarf2out.h, emit-rtl.c, emit-rtl.h, except.c, explow.c, expmed.c, expmed.h, expr.c, expr.h, final.c, fixed-value.c, fixed-value.h, fold-const.c, function.c, function.h, fwprop.c, gcse.c, gengenrtl.c, genmodes.c, genopinit.c, genoutput.c, genpreds.c, genrecog.c, gensupport.c, gimple-ssa-strength-reduction.c, graphite-clast-to-gimple.c, haifa-sched.c, hooks.c, hooks.h, ifcvt.c, internal-fn.c, ira-build.c, ira-color.c, ira-conflicts.c, ira-costs.c, ira-emit.c, ira-int.h, ira-lives.c, ira.c, ira.h, jump.c, langhooks.h, libfuncs.h, lists.c, loop-doloop.c, loop-invariant.c, loop-iv.c, loop-unroll.c, lower-subreg.c, lower-subreg.h, lra-assigns.c, lra-constraints.c, lra-eliminations.c, lra-int.h, lra-lives.c, lra-spills.c, lra.c, lra.h, machmode.h, omp-low.c, optabs.c, optabs.h, output.h, postreload.c, print-tree.c, read-rtl.c, real.c, real.h, recog.c, recog.h, ree.c, reg-stack.c, regcprop.c, reginfo.c, regrename.c, regs.h, reload.c, reload.h, reload1.c, rtl.c, rtl.h, rtlanal.c, rtlhash.c, rtlhooks-def.h, rtlhooks.c, sched-deps.c, sel-sched-dump.c, sel-sched-ir.c, sel-sched-ir.h, sel-sched.c, simplify-rtx.c, stmt.c, stor-layout.c, stor-layout.h, target.def, targhooks.c, targhooks.h, tree-affine.c, tree-call-cdce.c, tree-complex.c, tree-data-ref.c, tree-dfa.c, tree-if-conv.c, tree-inline.c, tree-outof-ssa.c, tree-scalar-evolution.c, tree-ssa-address.c, tree-ssa-ccp.c, tree-ssa-loop-ivopts.c, tree-ssa-loop-ivopts.h, tree-ssa-loop-manip.c, tree-ssa-loop-prefetch.c, tree-ssa-math-opts.c, tree-ssa-reassoc.c, tree-ssa-sccvn.c, tree-streamer-in.c, tree-switch-conversion.c, tree-vect-data-refs.c, tree-vect-generic.c, tree-vect-loop.c, tree-vect-patterns.c, tree-vect-slp.c, tree-vect-stmts.c, tree-vrp.c, tree.c, tree.h, tsan.c, ubsan.c, valtrack.c, var-tracking.c, varasm.c: Remove redundant enum from machine_mode. gcc/ * gengtype.c (main): Treat machine_mode as a scalar typedef. * genmodes.c (emit_insn_modes_h): Hide inline functions if USED_FOR_TARGET. From-SVN: r216834
122 lines
5.1 KiB
C
122 lines
5.1 KiB
C
/* Definitions and declarations for stor-layout.c.
|
|
Copyright (C) 2013-2014 Free Software Foundation, Inc.
|
|
|
|
This file is part of GCC.
|
|
|
|
GCC is free software; you can redistribute it and/or modify it under
|
|
the terms of the GNU General Public License as published by the Free
|
|
Software Foundation; either version 3, or (at your option) any later
|
|
version.
|
|
|
|
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with GCC; see the file COPYING3. If not see
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef GCC_STOR_LAYOUT_H
|
|
#define GCC_STOR_LAYOUT_H
|
|
|
|
extern void set_min_and_max_values_for_integral_type (tree, int, signop);
|
|
extern void fixup_signed_type (tree);
|
|
extern void internal_reference_types (void);
|
|
extern unsigned int update_alignment_for_field (record_layout_info, tree,
|
|
unsigned int);
|
|
extern record_layout_info start_record_layout (tree);
|
|
extern tree bit_from_pos (tree, tree);
|
|
extern tree byte_from_pos (tree, tree);
|
|
extern void pos_from_bit (tree *, tree *, unsigned int, tree);
|
|
extern void normalize_offset (tree *, tree *, unsigned int);
|
|
extern tree rli_size_unit_so_far (record_layout_info);
|
|
extern tree rli_size_so_far (record_layout_info);
|
|
extern void normalize_rli (record_layout_info);
|
|
extern void place_field (record_layout_info, tree);
|
|
extern void compute_record_mode (tree);
|
|
extern void finish_bitfield_layout (tree);
|
|
extern void finish_record_layout (record_layout_info, int);
|
|
extern unsigned int element_precision (const_tree);
|
|
extern void finalize_size_functions (void);
|
|
extern void fixup_unsigned_type (tree);
|
|
extern void initialize_sizetypes (void);
|
|
|
|
/* Finish up a builtin RECORD_TYPE. Give it a name and provide its
|
|
fields. Optionally specify an alignment, and then lay it out. */
|
|
extern void finish_builtin_struct (tree, const char *, tree, tree);
|
|
|
|
/* Given a VAR_DECL, PARM_DECL, RESULT_DECL or FIELD_DECL node,
|
|
calculates the DECL_SIZE, DECL_SIZE_UNIT, DECL_ALIGN and DECL_MODE
|
|
fields. Call this only once for any given decl node.
|
|
|
|
Second argument is the boundary that this field can be assumed to
|
|
be starting at (in bits). Zero means it can be assumed aligned
|
|
on any boundary that may be needed. */
|
|
extern void layout_decl (tree, unsigned);
|
|
|
|
/* Given a ..._TYPE node, calculate the TYPE_SIZE, TYPE_SIZE_UNIT,
|
|
TYPE_ALIGN and TYPE_MODE fields. If called more than once on one
|
|
node, does nothing except for the first time. */
|
|
extern void layout_type (tree);
|
|
|
|
/* Return the least alignment in bytes required for type TYPE. */
|
|
extern unsigned int min_align_of_type (tree);
|
|
|
|
/* Construct various nodes representing fract or accum data types. */
|
|
extern tree make_fract_type (int, int, int);
|
|
extern tree make_accum_type (int, int, int);
|
|
|
|
#define make_signed_fract_type(P) make_fract_type (P, 0, 0)
|
|
#define make_unsigned_fract_type(P) make_fract_type (P, 1, 0)
|
|
#define make_sat_signed_fract_type(P) make_fract_type (P, 0, 1)
|
|
#define make_sat_unsigned_fract_type(P) make_fract_type (P, 1, 1)
|
|
#define make_signed_accum_type(P) make_accum_type (P, 0, 0)
|
|
#define make_unsigned_accum_type(P) make_accum_type (P, 1, 0)
|
|
#define make_sat_signed_accum_type(P) make_accum_type (P, 0, 1)
|
|
#define make_sat_unsigned_accum_type(P) make_accum_type (P, 1, 1)
|
|
|
|
#define make_or_reuse_signed_fract_type(P) \
|
|
make_or_reuse_fract_type (P, 0, 0)
|
|
#define make_or_reuse_unsigned_fract_type(P) \
|
|
make_or_reuse_fract_type (P, 1, 0)
|
|
#define make_or_reuse_sat_signed_fract_type(P) \
|
|
make_or_reuse_fract_type (P, 0, 1)
|
|
#define make_or_reuse_sat_unsigned_fract_type(P) \
|
|
make_or_reuse_fract_type (P, 1, 1)
|
|
#define make_or_reuse_signed_accum_type(P) \
|
|
make_or_reuse_accum_type (P, 0, 0)
|
|
#define make_or_reuse_unsigned_accum_type(P) \
|
|
make_or_reuse_accum_type (P, 1, 0)
|
|
#define make_or_reuse_sat_signed_accum_type(P) \
|
|
make_or_reuse_accum_type (P, 0, 1)
|
|
#define make_or_reuse_sat_unsigned_accum_type(P) \
|
|
make_or_reuse_accum_type (P, 1, 1)
|
|
|
|
extern tree make_signed_type (int);
|
|
extern tree make_unsigned_type (int);
|
|
|
|
/* Return the mode for data of a given size SIZE and mode class CLASS.
|
|
If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE.
|
|
The value is BLKmode if no other mode is found. This is like
|
|
mode_for_size, but is passed a tree. */
|
|
extern machine_mode mode_for_size_tree (const_tree, enum mode_class, int);
|
|
|
|
extern tree bitwise_type_for_mode (machine_mode);
|
|
|
|
/* Given a VAR_DECL, PARM_DECL or RESULT_DECL, clears the results of
|
|
a previous call to layout_decl and calls it again. */
|
|
extern void relayout_decl (tree);
|
|
|
|
/* variable_size (EXP) is like save_expr (EXP) except that it
|
|
is for the special case of something that is part of a
|
|
variable size for a data type. It makes special arrangements
|
|
to compute the value at the right time when the data type
|
|
belongs to a function parameter. */
|
|
extern tree variable_size (tree);
|
|
|
|
/* Vector types need to check target flags to determine type. */
|
|
extern machine_mode vector_type_mode (const_tree);
|
|
|
|
#endif // GCC_STOR_LAYOUT_H
|