diff options
author | jfc <jfc@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-10-01 16:47:41 +0000 |
---|---|---|
committer | jfc <jfc@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-10-01 16:47:41 +0000 |
commit | 33685f56cd53281fb097a7b47ae866dd2b529c41 (patch) | |
tree | d9bf3be339a2978253909ce15a9dede99fd49e66 | |
parent | a821813a77e293802b6aab756a37a69d5be25125 (diff) | |
download | gcc-33685f56cd53281fb097a7b47ae866dd2b529c41.tar.gz |
* dwarf2out.c (expand_builtin_dwarf_reg_size): Fix to work
with more than three size ranges.
* flow.c (sbitmap_copy): Use bcopy to copy bitmap.
* rtl.c (mode_name): Add a null string at the end of the array.
(mode_wider_mode): Change type to unsigned char.
(mode_mask_array): New variable.
(init_rtl): Update for mode_wider_mode type change.
* rtl.h (mode_wider_mode): Change type to unsigned char.
(mode_mask_array): Declare.
(GET_MODE_MASK): Use mode_mask_array.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@22717 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 16 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 20 | ||||
-rw-r--r-- | gcc/flow.c | 8 | ||||
-rw-r--r-- | gcc/machmode.h | 10 | ||||
-rw-r--r-- | gcc/rtl.c | 25 |
5 files changed, 51 insertions, 28 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 149eeaadb49..e5fb2b236c4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +Thu Oct 1 19:20:09 1998 John Carr <jfc@mit.edu> + + * dwarf2out.c (expand_builtin_dwarf_reg_size): Fix to work + with more than three size ranges. + + * flow.c (sbitmap_copy): Use bcopy to copy bitmap. + + * rtl.c (mode_name): Add a null string at the end of the array. + (mode_wider_mode): Change type to unsigned char. + (mode_mask_array): New variable. + (init_rtl): Update for mode_wider_mode type change. + + * rtl.h (mode_wider_mode): Change type to unsigned char. + (mode_mask_array): Declare. + (GET_MODE_MASK): Use mode_mask_array. + Thu Oct 1 15:56:01 1998 Gavin Romig-Koch <gavin@cygnus.com> * calls.c (expand_call) : Encapsulate code into diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index d768320b2de..9826c3809a2 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -642,24 +642,26 @@ expand_builtin_dwarf_reg_size (reg_tree, target) } else { + int last_end = 100; --n_ranges; t = build_int_2 (ranges[n_ranges].size, 0); - size = DWARF_FRAME_REGNUM (ranges[n_ranges].beg); - for (; n_ranges--; ) + do { - if ((DWARF_FRAME_REGNUM (ranges[n_ranges].end) - - DWARF_FRAME_REGNUM (ranges[n_ranges].beg)) - != ranges[n_ranges].end - ranges[n_ranges].beg) + int beg = DWARF_FRAME_REGNUM (ranges[n_ranges].beg); + int end = DWARF_FRAME_REGNUM (ranges[n_ranges].end); + if (beg < 0) + continue; + if (end >= last_end) abort (); - if (DWARF_FRAME_REGNUM (ranges[n_ranges].beg) >= size) + last_end = end; + if (end - beg != ranges[n_ranges].end - ranges[n_ranges].beg) abort (); - size = DWARF_FRAME_REGNUM (ranges[n_ranges].beg); t2 = fold (build (LE_EXPR, integer_type_node, reg_tree, - build_int_2 (DWARF_FRAME_REGNUM - (ranges[n_ranges].end), 0))); + build_int_2 (end, 0))); t = fold (build (COND_EXPR, integer_type_node, t2, build_int_2 (ranges[n_ranges].size, 0), t)); } + while (--n_ranges > 0); } return expand_expr (t, target, Pmode, 0); } diff --git a/gcc/flow.c b/gcc/flow.c index e939d198465..f963c107c71 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -3605,13 +3605,7 @@ void sbitmap_copy (dst, src) sbitmap dst, src; { - int i; - sbitmap_ptr d,s; - - s = src->elms; - d = dst->elms; - for (i = 0; i < dst->size; i++) - *d++ = *s++; + bcopy (src->elms, dst->elms, sizeof (SBITMAP_ELT_TYPE) * dst->size); } /* Zero all elements in a bitmap. */ diff --git a/gcc/machmode.h b/gcc/machmode.h index 5f8459df5e1..119950c4348 100644 --- a/gcc/machmode.h +++ b/gcc/machmode.h @@ -196,14 +196,14 @@ extern int mode_unit_size[]; /* Get a bitmask containing 1 for all bits in a word that fit within mode MODE. */ -#define GET_MODE_MASK(MODE) \ - ((GET_MODE_BITSIZE (MODE) >= HOST_BITS_PER_WIDE_INT) \ - ?(HOST_WIDE_INT) ~0 : (((HOST_WIDE_INT) 1 << GET_MODE_BITSIZE (MODE)) - 1)) +extern const unsigned HOST_WIDE_INT mode_mask_array[]; + +#define GET_MODE_MASK(MODE) mode_mask_array[(int) (MODE)] /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI). */ -extern enum machine_mode mode_wider_mode[]; -#define GET_MODE_WIDER_MODE(MODE) (mode_wider_mode[(int) (MODE)]) +extern unsigned char mode_wider_mode[]; +#define GET_MODE_WIDER_MODE(MODE) ((enum machine_mode)mode_wider_mode[(int) (MODE)]) /* 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. diff --git a/gcc/rtl.c b/gcc/rtl.c index 26ffc9a2a10..1929459a8ff 100644 --- a/gcc/rtl.c +++ b/gcc/rtl.c @@ -58,13 +58,15 @@ char *rtx_name[] = { #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) NAME, -char *mode_name[(int) MAX_MACHINE_MODE] = { +char *mode_name[(int) MAX_MACHINE_MODE + 1] = { #include "machmode.def" #ifdef EXTRA_CC_MODES - EXTRA_CC_NAMES + EXTRA_CC_NAMES, #endif - + /* Add an extra field to avoid a core dump if someone tries to convert + MAX_MACHINE_MODE to a string. */ + "" }; #undef DEF_MACHMODE @@ -107,14 +109,23 @@ int mode_unit_size[(int) MAX_MACHINE_MODE] = { use this. */ #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) \ - (enum machine_mode) WIDER, + (unsigned char) WIDER, -enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = { +unsigned char mode_wider_mode[(int) MAX_MACHINE_MODE] = { #include "machmode.def" /* machine modes are documented here */ }; #undef DEF_MACHMODE +#define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) \ + ((SIZE) * BITS_PER_UNIT >= HOST_BITS_PER_WIDE_INT) ? ~(unsigned HOST_WIDE_INT)0 : ((unsigned HOST_WIDE_INT) 1 << (SIZE) * BITS_PER_UNIT) - 1, + +/* Indexed by machine mode, gives mask of significant bits in mode. */ + +const unsigned HOST_WIDE_INT mode_mask_array[(int) MAX_MACHINE_MODE] = { +#include "machmode.def" +}; + /* Indexed by mode class, gives the narrowest mode for each class. */ enum machine_mode class_narrowest_mode[(int) MAX_MODE_CLASS]; @@ -892,8 +903,8 @@ init_rtl () mode_class[i] = MODE_CC; mode_size[i] = mode_size[(int) CCmode]; mode_unit_size[i] = mode_unit_size[(int) CCmode]; - mode_wider_mode[i - 1] = (enum machine_mode) i; - mode_wider_mode[i] = VOIDmode; + mode_wider_mode[i - 1] = i; + mode_wider_mode[i] = (unsigned char)VOIDmode; } #endif |