* machmode.h (get_mode_alignment): Declare.
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 24 Feb 2000 10:07:32 +0000 (10:07 +0000)
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 24 Feb 2000 10:07:32 +0000 (10:07 +0000)
(GET_MODE_ALIGNMENT): Call it.
* stor-layout.c (get_mode_alignment): New function. Make
sure alignment is always power of 2.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@32134 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/machmode.h
gcc/stor-layout.c

index 71765ab..225b3bc 100644 (file)
@@ -1,3 +1,10 @@
+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.
+
 2000-02-23  Zack Weinberg  <zack@wolery.cumb.org>
 
        * i386.h: Remove useless definition of "I386" and misleading
index 1f2fb2b..702e209 100644 (file)
@@ -125,9 +125,9 @@ extern enum machine_mode get_best_mode PARAMS ((int, int, unsigned int,
 
 /* Determine alignment, 1<=result<=BIGGEST_ALIGNMENT.  */
 
-#define GET_MODE_ALIGNMENT(MODE)   \
-  (unsigned int) MIN (BIGGEST_ALIGNMENT,          \
-                     MAX (1, (GET_MODE_UNIT_SIZE (MODE) * BITS_PER_UNIT)))
+extern unsigned get_mode_alignment PARAMS ((enum machine_mode));
+
+#define GET_MODE_ALIGNMENT(MODE) get_mode_alignment (MODE)
 
 /* For each class, get the narrowest mode in that class.  */
 
index be27fae..3783a2f 100644 (file)
@@ -1528,6 +1528,23 @@ get_best_mode (bitsize, bitpos, align, largest_mode, volatilep)
   return mode;
 }
 
+/* Return the alignment of MODE. This will be bounded by 1 and
+   BIGGEST_ALIGNMENT.  */
+
+unsigned get_mode_alignment (mode)
+     enum machine_mode mode;
+{
+  unsigned alignment = GET_MODE_UNIT_SIZE (mode);
+  
+  /* Extract the LSB of the size.  */
+  alignment = alignment & -alignment;
+  
+  alignment *= BITS_PER_UNIT;
+
+  alignment = MIN (BIGGEST_ALIGNMENT, MAX (1, alignment));
+  return alignment;
+}
+
 /* This function is run once to initialize stor-layout.c.  */
 
 void