summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2002-08-11 12:44:21 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2002-08-11 12:44:21 +0000
commit804b782811fa76abd1e24c8c5d7894b21c043481 (patch)
tree204c72733d9f9f3e3c82f12d5e9b62539eb865e7
parent6ae38bff981ae1f144123b8722c91081cc13c03f (diff)
downloadppe42-gcc-804b782811fa76abd1e24c8c5d7894b21c043481.tar.gz
ppe42-gcc-804b782811fa76abd1e24c8c5d7894b21c043481.zip
* i386.c (classify_argument): Fix computing of field's offsets.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@56204 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/i386/i386.c11
2 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 296e960097d..ff97998112a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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:
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 0c1ed9fa29e..1010bb81948 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -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;
}
/* 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++)
OpenPOWER on IntegriCloud