OSDN Git Service

* i386.c (classify_argument): Fix computing of field's offsets.
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 11 Aug 2002 12:44:21 +0000 (12:44 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 11 Aug 2002 12:44:21 +0000 (12:44 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@56204 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.c

index 296e960..ff97998 100644 (file)
@@ -1,3 +1,7 @@
+Sun Aug 11 14:43:17 CEST 2002  Jan Hubicka  <jh@suse.cz>
+
+       * i386.c (classify_argument): Fix computing of field's offsets.
+
 2002-08-11  Andreas Jaeger  <aj@suse.de>
 
        PR target/7531:
index 0c1ed9f..1010bb8 100644 (file)
@@ -1146,6 +1146,9 @@ override_options ()
               ix86_tls_dialect_string);
     }
 
+  if (profile_flag)
+    target_flags &= ~MASK_OMIT_LEAF_FRAME_POINTER;
+
   /* Keep nonleaf frame pointers.  */
   if (TARGET_OMIT_LEAF_FRAME_POINTER)
     flag_omit_frame_pointer = 1;
@@ -1257,6 +1260,8 @@ optimization_options (level, size)
       flag_pcc_struct_return = 0;
       flag_asynchronous_unwind_tables = 1;
     }
+  if (profile_flag)
+    flag_omit_frame_pointer = 0;
 }
 \f
 /* Table of valid machine attributes.  */
@@ -1634,7 +1639,7 @@ classify_argument (mode, type, classes, bit_offset)
                     return 0;
                   for (i = 0; i < num; i++)
                     {
-                      int pos = (offset + bit_offset) / 8 / 8;
+                      int pos = (offset + (bit_offset % 64)) / 8 / 8;
                       classes[i + pos] =
                         merge_classes (subclasses[i], classes[i + pos]);
                     }
@@ -1671,7 +1676,7 @@ classify_argument (mode, type, classes, bit_offset)
                      for (i = 0; i < num; i++)
                        {
                          int pos =
-                           (int_bit_position (field) + bit_offset) / 8 / 8;
+                           (int_bit_position (field) + (bit_offset % 64)) / 8 / 8;
                          classes[i + pos] =
                            merge_classes (subclasses[i], classes[i + pos]);
                        }
@@ -1717,7 +1722,7 @@ classify_argument (mode, type, classes, bit_offset)
 
                   num = classify_argument (TYPE_MODE (type),
                                            type, subclasses,
-                                           (offset + bit_offset) % 256);
+                                           (offset + (bit_offset % 64)) % 256);
                   if (!num)
                     return 0;
                   for (i = 0; i < num; i++)