This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Word length != 2^n
- To: gcc-patches at gcc dot gnu dot org, nathan at codesourcery dot com
- Subject: Word length != 2^n
- From: lars at brinkhoff dot se
- Date: 13 Jan 2001 10:38:01 +0100
- Organization: nocrew
I'm writing a new processor backend. When porting the backend from
GCC 2.95.2 to the current CVS tree I stumbled accross this code, which
does not work on processors which does not have 2^n word length.
/* Return the alignment of MODE. This will be bounded by 1 and
BIGGEST_ALIGNMENT. */
unsigned int
get_mode_alignment (mode)
enum machine_mode mode;
{
unsigned int alignment = GET_MODE_UNIT_SIZE (mode) * BITS_PER_UNIT;
/* Extract the LSB of the size. */
alignment = alignment & -alignment;
alignment = MIN (BIGGEST_ALIGNMENT, MAX (1, alignment));
return alignment;
}
Here's the corresponding ChangeLog entry:
2000-02-24 Nathan Sidwell <nathan@codesourcery.com>
* machmode.h (get_mode_alignment): Declare.
(GET_MODE_ALIGNMENT): Call it.
* stor-layout.c (get_mode_alignment): New function. Make
sure alignment is always power of 2.
A tentative patch would thus be:
2001-01-13 lars brinkhoff <lars@brinkhoff.se>
* stor-layout.c (get_mode_alignment): Remove the restriction
that alignment is always a power of 2.
diff -u -r1.92 stor-layout.c
--- stor-layout.c 2000/12/17 17:22:41 1.92
+++ stor-layout.c 2001/01/13 09:24:50
@@ -1797,9 +1797,6 @@
{
unsigned int alignment = GET_MODE_UNIT_SIZE (mode) * BITS_PER_UNIT;
- /* Extract the LSB of the size. */
- alignment = alignment & -alignment;
-
alignment = MIN (BIGGEST_ALIGNMENT, MAX (1, alignment));
return alignment;
}