public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags
@ 2005-08-23 21:23 mcvick_e at iname dot com
2005-08-23 21:30 ` [Bug target/23539] " pinskia at gcc dot gnu dot org
` (15 more replies)
0 siblings, 16 replies; 17+ messages in thread
From: mcvick_e at iname dot com @ 2005-08-23 21:23 UTC (permalink / raw)
To: gcc-bugs
This issue was uncovered in porting our existing software to the GNU tool-
chain. We have a number of structures that contain 3 individual bytes of
data. When the GNU tool-chain compiles the source code, it creates a
load/store byte instruction followed by a load/store half-word instruction with
an odd (1,3,5,7,9,11,etc) memory offset. This causes a data alignment
exception to occur.
We have tried all combinations of the compiler flags for structure packing,
alignment (natural, power), and anything else that we have been able to uncover
in the GCC documentation.
This behavior exists at optimization levels, 0,1 and 2. We haven't tried any
other levels as of yet.
There should be a means of having the compiler override mis-aligned address
references. This is supported at a software level (if the authors of the OS or
software handle this exception). However, the authors of this component did
not, and it would cause far too much of a runtime hit to implement this. A
code sample is included below that will re-create this problem.
---- File test.cc -----
struct foo {
char bar1;
char bar2;
char bar3;
};
int foobarStruct(foo fubarStruct) {
if(fubarStruct.bar1 == 'A' &&
fubarStruct.bar2 == 'B' &&
fubarStruct.bar3 == 'C')
{
return 1;
}
else {
return 0;
}
}
int main(int argc, char **argv) {
int rVal1;
int rVal2;
foo barStruct;
barStruct.bar1 = 'A';
barStruct.bar2 = 'B';
barStruct.bar3 = 'C';
rVal1 = foobarStruct(barStruct);
barStruct.bar1 = 'A';
barStruct.bar2 = 'C';
barStruct.bar3 = 'B';
rVal1 = foobarStruct(barStruct);
return (rVal1 || rVal2);
}
------------- End of file ---------------------
Again using any combinations of compiler flags -malign-natural, -malign-power, -
fpack-struct=2, -fno-pack-struct, etc have not given us the desired behavior.
Here's the assembly output from the command(s):
(1)> g++ test.cc -o test
(2)> ppcobjdump -C -S test.o
test.o: file format elf32-powerpc
Disassembly of section .text:
00000000 <foobarStruct(foo)>:
0: 94 21 ff e8 stwu r1,-24(r1)
4: 93 e1 00 14 stw r31,20(r1)
8: 7c 3f 0b 78 mr r31,r1
c: 90 7f 00 0c stw r3,12(r31)
10: 81 3f 00 0c lwz r9,12(r31)
14: 88 09 00 00 lbz r0,0(r9)
18: 54 00 06 3e clrlwi r0,r0,24
1c: 2f 80 00 41 cmpwi cr7,r0,65
20: 40 9e 00 38 bne- cr7,58 <foobarStruct(foo)+0x58>
24: 81 3f 00 0c lwz r9,12(r31)
28: 88 09 00 01 lbz r0,1(r9)
2c: 54 00 06 3e clrlwi r0,r0,24
30: 2f 80 00 42 cmpwi cr7,r0,66
34: 40 9e 00 24 bne- cr7,58 <foobarStruct(foo)+0x58>
38: 81 3f 00 0c lwz r9,12(r31)
3c: 88 09 00 02 lbz r0,2(r9)
40: 54 00 06 3e clrlwi r0,r0,24
44: 2f 80 00 43 cmpwi cr7,r0,67
48: 40 9e 00 10 bne- cr7,58 <foobarStruct(foo)+0x58>
4c: 38 00 00 01 li r0,1
50: 90 1f 00 08 stw r0,8(r31)
54: 48 00 00 0c b 60 <foobarStruct(foo)+0x60>
58: 39 20 00 00 li r9,0
5c: 91 3f 00 08 stw r9,8(r31)
60: 80 1f 00 08 lwz r0,8(r31)
64: 7c 03 03 78 mr r3,r0
68: 81 61 00 00 lwz r11,0(r1)
6c: 83 eb ff fc lwz r31,-4(r11)
70: 7d 61 5b 78 mr r1,r11
74: 4e 80 00 20 blr
00000078 <main>:
78: 94 21 ff a8 stwu r1,-88(r1)
7c: 7c 08 02 a6 mflr r0
80: 93 e1 00 54 stw r31,84(r1)
84: 90 01 00 5c stw r0,92(r1)
88: 7c 3f 0b 78 mr r31,r1
8c: 90 7f 00 28 stw r3,40(r31)
90: 90 9f 00 2c stw r4,44(r31)
94: 48 00 00 01 bl 94 <main+0x1c>
98: 38 00 00 41 li r0,65
9c: 98 1f 00 16 stb r0,22(r31)
a0: 38 00 00 42 li r0,66
a4: 98 1f 00 17 stb r0,23(r31)
a8: 38 00 00 43 li r0,67
ac: 98 1f 00 18 stb r0,24(r31)
b0: 88 1f 00 16 lbz r0,22(r31)
b4: a1 3f 00 17 lhz r9,23(r31) <-- Notice the odd offset
b8: 98 1f 00 13 stb r0,19(r31)
bc: b1 3f 00 14 sth r9,20(r31)
c0: 88 1f 00 13 lbz r0,19(r31)
c4: a1 3f 00 14 lhz r9,20(r31)
c8: 98 1f 00 30 stb r0,48(r31)
cc: b1 3f 00 31 sth r9,49(r31) <-- Notice the off offset
d0: 38 1f 00 30 addi r0,r31,48
d4: 7c 03 03 78 mr r3,r0
d8: 48 00 00 01 bl d8 <main+0x60>
dc: 7c 60 1b 78 mr r0,r3
e0: 90 1f 00 0c stw r0,12(r31)
e4: 38 00 00 41 li r0,65
e8: 98 1f 00 16 stb r0,22(r31)
ec: 38 00 00 43 li r0,67
f0: 98 1f 00 17 stb r0,23(r31)
f4: 38 00 00 42 li r0,66
f8: 98 1f 00 18 stb r0,24(r31)
fc: 88 1f 00 16 lbz r0,22(r31)
100: a1 3f 00 17 lhz r9,23(r31) <-- Again odd offsets
104: 98 1f 00 10 stb r0,16(r31)
108: b1 3f 00 11 sth r9,17(r31) <-- Again odd offsets
10c: 88 1f 00 10 lbz r0,16(r31)
110: a1 3f 00 11 lhz r9,17(r31)
114: 98 1f 00 30 stb r0,48(r31)
118: b1 3f 00 31 sth r9,49(r31)
11c: 38 1f 00 30 addi r0,r31,48
120: 7c 03 03 78 mr r3,r0
124: 48 00 00 01 bl 124 <main+0xac>
128: 7c 60 1b 78 mr r0,r3
12c: 90 1f 00 0c stw r0,12(r31)
130: 80 1f 00 0c lwz r0,12(r31)
134: 2f 80 00 00 cmpwi cr7,r0,0
138: 40 9e 00 10 bne- cr7,148 <main+0xd0>
13c: 80 1f 00 08 lwz r0,8(r31)
140: 2f 80 00 00 cmpwi cr7,r0,0
144: 41 9e 00 10 beq- cr7,154 <main+0xdc>
148: 38 00 00 01 li r0,1
14c: 90 1f 00 40 stw r0,64(r31)
150: 48 00 00 0c b 15c <main+0xe4>
154: 38 00 00 00 li r0,0
158: 90 1f 00 40 stw r0,64(r31)
15c: 80 1f 00 40 lwz r0,64(r31)
160: 7c 03 03 78 mr r3,r0
164: 81 61 00 00 lwz r11,0(r1)
168: 80 0b 00 04 lwz r0,4(r11)
16c: 7c 08 03 a6 mtlr r0
170: 83 eb ff fc lwz r31,-4(r11)
174: 7d 61 5b 78 mr r1,r11
178: 4e 80 00 20 blr
>From Section 3.3.1 Alignment and Misaligned Accesses
The operand of a single-register memory access instruction has a natural
alignment boundary equal to the operand length. The "natural" address of an
operand is an integral multiple of the operand length, ......
I can understand what the compiler is trying to achieve here in the sense of
doing two loads/stores versus three, however it is performing misaligned
loads/stores as a result. This optimization actually becomes a performance hit
if the underlying system is forced to perform the exception handling and piece
the parts together.
Perhaps it's not a "real" bug, however not being able to override this behavior
probably is.
This behavior has been observed in 4.0.1, 4.0.0, 3.4.4 and 3.3.1
--
Summary: C & C++ compiler generating misaligned references
regardless of compiler flags
Product: gcc
Version: 4.0.1
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: mcvick_e at iname dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: powerpc-eabi
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
@ 2005-08-23 21:30 ` pinskia at gcc dot gnu dot org
2005-08-23 22:24 ` mcvick_e at iname dot com
` (14 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-08-23 21:30 UTC (permalink / raw)
To: gcc-bugs
--
What |Removed |Added
----------------------------------------------------------------------------
Component|c++ |target
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
2005-08-23 21:30 ` [Bug target/23539] " pinskia at gcc dot gnu dot org
@ 2005-08-23 22:24 ` mcvick_e at iname dot com
2005-08-23 22:30 ` mcvick_e at iname dot com
` (13 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: mcvick_e at iname dot com @ 2005-08-23 22:24 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From mcvick_e at iname dot com 2005-08-23 21:44 -------
I should also mention that the target processor for this is the 603, not 603e
or otherwise. Even compiling with the -mtune=603 and -mcpu=603 gives the same
output. And those old processors do not handle mis-aligned short references in
hardware.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
2005-08-23 21:30 ` [Bug target/23539] " pinskia at gcc dot gnu dot org
2005-08-23 22:24 ` mcvick_e at iname dot com
@ 2005-08-23 22:30 ` mcvick_e at iname dot com
2005-08-23 23:05 ` pinskia at gcc dot gnu dot org
` (12 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: mcvick_e at iname dot com @ 2005-08-23 22:30 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From mcvick_e at iname dot com 2005-08-23 22:24 -------
The data access exception is incorrect in this sense. The software developer
had updated the status of this issue and states that this causes a Machine
Check exception to occur on our current hardware.
The observation made earlier that padding the structure with a byte clearing up
the issue is still a factual statement. We will have to discuss this with our
hardware engineers as to why this occurs, however the issue is the same, since
this hardware cannot be modified. The software is for space based satellites
which have already been launched.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
` (2 preceding siblings ...)
2005-08-23 22:30 ` mcvick_e at iname dot com
@ 2005-08-23 23:05 ` pinskia at gcc dot gnu dot org
2005-08-23 23:35 ` steven at gcc dot gnu dot org
` (11 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-08-23 23:05 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-08-23 22:30 -------
GCC assumes you have unaligned access.
Use -mstrict-align if you want to assume unaligned access does not work.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
` (3 preceding siblings ...)
2005-08-23 23:05 ` pinskia at gcc dot gnu dot org
@ 2005-08-23 23:35 ` steven at gcc dot gnu dot org
2005-08-24 0:20 ` mcvick_e at iname dot com
` (10 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: steven at gcc dot gnu dot org @ 2005-08-23 23:35 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From steven at gcc dot gnu dot org 2005-08-23 23:35 -------
Re. comment #3, you can find a whole load of options to control various things
about gcc's powerpc backend in the manual. For example in the manual for GCC
4.0.1, you can give this page a look:
http://gcc.gnu.org/onlinedocs/gcc-4.0.1/gcc/RS_002f6000-and-PowerPC-Options.html#RS_002f6000-and-PowerPC-Options
-mstrict-align is there too:
-mno-strict-align
-mstrict-align
On System V.4 and embedded PowerPC systems do not (do) assume that unaligned
memory references will be handled by the system.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
` (4 preceding siblings ...)
2005-08-23 23:35 ` steven at gcc dot gnu dot org
@ 2005-08-24 0:20 ` mcvick_e at iname dot com
2005-08-24 0:28 ` mcvick_e at iname dot com
` (9 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: mcvick_e at iname dot com @ 2005-08-24 0:20 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From mcvick_e at iname dot com 2005-08-23 23:47 -------
Our Hardware engineers came back to us informing us as to why this _may_ be an
issue. The hardware has a memory bus arbiter ASIC that does not handle mis-
aligned references for 2-byte accesses ending on 1 or 5. So this construct
will fail indeterminately.
I passed on the information given us about the -mstrict-align and it appears to
have cleared up the issue with odd alignment offsets.
Thanks Much!
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |INVALID
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
` (5 preceding siblings ...)
2005-08-24 0:20 ` mcvick_e at iname dot com
@ 2005-08-24 0:28 ` mcvick_e at iname dot com
2005-08-24 0:40 ` pinskia at gcc dot gnu dot org
` (8 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: mcvick_e at iname dot com @ 2005-08-24 0:28 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From mcvick_e at iname dot com 2005-08-24 00:20 -------
Unfortunately this still appears to be some sort of bug. The solution given
with the -mstrict-align worked for the test case, but in the specific case
here, still fails. Attached is the output of the link command given. The
compiler invocation for all of the associated files that make the libraries,
and object files all contain the -mstrict-align.
See the text below...
(1)> ppcg++ -gstabs+ -O1 -fno-guess-branch-probability -mcpu=603e -mtune=603e -
mstrict-align -nostdlib -DGH_COMPAT -DAVOID_EMPTY_CLASSES -DSVRT_TRACE -fno-use-
cxa-atexit -fcheck-new -fno-rtti -fno-exceptions -Wabi -
Wextra /export/GNU_port/MM.1/lib/sac/begin.o /export/GNU_port/MM.1/lib/sac/sysin
it.o /export/GNU_port/MM.1/lib/sac/prepccfg.o /export/GNU_port/MM.1/lib/sac/psos
cfg.o /export/GNU_port/MM.1/lib/sac/drv_conf.o --no-undefined -Bstatic --warn-
section-align --demangle --warn-once --warn-common --sort-common -T sac.cmd -
L /export/GNU_port/MM.1/lib -L /export/GNU_port/MM.1/lbcs/lib \
-o /export/GNU_port/MM.1/bins/sac.x
-------------------------------------------------------------------
(2)> ppcobjdump -C -S sac.x | grep sth | less
494108: b3 43 00 18 sth r26,24(r3)
49410c: b3 23 00 1a sth r25,26(r3)
494110: b3 03 00 1c sth r24,28(r3)
494c0c: b0 01 00 21 sth r0,33(r1) <-- Still ODD alignment
4954a0: b1 3a 30 ec sth r9,12524(r26)
4956ac: b1 23 00 04 sth r9,4(r3)
4957d4: b0 03 00 a4 sth r0,164(r3)
4959a8: b1 23 00 00 sth r9,0(r3)
495bac: b0 03 00 a4 sth r0,164(r3)
495ed0: b1 2a 30 e0 sth r9,12512(r10)
(3)>
--
What |Removed |Added
----------------------------------------------------------------------------
Status|RESOLVED |UNCONFIRMED
Resolution|INVALID |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
` (6 preceding siblings ...)
2005-08-24 0:28 ` mcvick_e at iname dot com
@ 2005-08-24 0:40 ` pinskia at gcc dot gnu dot org
2005-08-24 3:53 ` mcvick_e at iname dot com
` (7 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2005-08-24 0:40 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From pinskia at gcc dot gnu dot org 2005-08-24 00:27 -------
Of course not having the source does not help.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
` (7 preceding siblings ...)
2005-08-24 0:40 ` pinskia at gcc dot gnu dot org
@ 2005-08-24 3:53 ` mcvick_e at iname dot com
2005-08-24 16:00 ` mcvick_e at iname dot com
` (6 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: mcvick_e at iname dot com @ 2005-08-24 3:53 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From mcvick_e at iname dot com 2005-08-24 02:57 -------
I understand this frustration. The source code is proprietary material so I
cannot post it. However we are working on developing a sample case to
demonstrate what is happening.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
` (8 preceding siblings ...)
2005-08-24 3:53 ` mcvick_e at iname dot com
@ 2005-08-24 16:00 ` mcvick_e at iname dot com
2005-08-26 23:56 ` dje at gcc dot gnu dot org
` (5 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: mcvick_e at iname dot com @ 2005-08-24 16:00 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From mcvick_e at iname dot com 2005-08-24 15:44 -------
Here is a short program that duplicates the problem.
------------------ test.cc ------------------------
struct foo {
char bar1;
char bar2;
char bar3;
};
class bar2 {
private:
static foo myFubarStruct;
public:
static void fbs(foo fubarStruct);
};
foo bar2::myFubarStruct;
class bar1 {
private:
int rVal1;
int rVal2;
public:
void doFoo(void);
};
void bar1::doFoo(void) {
foo barStruct;
barStruct.bar1 = 'A';
barStruct.bar2 = 'B';
barStruct.bar3 = 'C';
bar2::fbs(barStruct);
}
void bar2::fbs(foo fubarStruct) {
myFubarStruct = fubarStruct;
}
int main(int argc, char **argv) {
bar1 baar;
baar.doFoo();
return (0);
}
------------------ end of test.cc ------------------------------
The test app was just compiled to object code as shown below with the -mstrict-
align option.
(2)> ppcg++ -mstrict-align -c test.cc
Then an objdump was done to dump the assembly (shown below)
(3)> ppcobjdump -C -S test.o
test.o: file format elf32-powerpc
Disassembly of section .text:
00000000 <bar2::fbs(foo)>:
0: 94 21 ff f0 stwu r1,-16(r1)
4: 93 e1 00 0c stw r31,12(r1)
8: 7c 3f 0b 78 mr r31,r1
c: 7c 6b 1b 78 mr r11,r3
10: 3d 20 00 00 lis r9,0
14: 39 29 00 00 addi r9,r9,0
18: 88 0b 00 00 lbz r0,0(r11)
1c: 89 4b 00 01 lbz r10,1(r11)
20: 89 6b 00 02 lbz r11,2(r11)
24: 98 09 00 00 stb r0,0(r9)
28: 99 49 00 01 stb r10,1(r9)
2c: 99 69 00 02 stb r11,2(r9)
30: 81 61 00 00 lwz r11,0(r1)
34: 83 eb ff fc lwz r31,-4(r11)
38: 7d 61 5b 78 mr r1,r11
3c: 4e 80 00 20 blr
00000040 <bar1::doFoo()>:
40: 94 21 ff c8 stwu r1,-56(r1)
44: 7c 08 02 a6 mflr r0
48: 93 e1 00 34 stw r31,52(r1)
4c: 90 01 00 3c stw r0,60(r1)
50: 7c 3f 0b 78 mr r31,r1
54: 90 7f 00 18 stw r3,24(r31)
58: 38 00 00 41 li r0,65
5c: 98 1f 00 0b stb r0,11(r31)
60: 38 00 00 42 li r0,66
64: 98 1f 00 0c stb r0,12(r31)
68: 38 00 00 43 li r0,67
6c: 98 1f 00 0d stb r0,13(r31)
70: 88 1f 00 0b lbz r0,11(r31)
74: 89 3f 00 0c lbz r9,12(r31)
78: 89 7f 00 0d lbz r11,13(r31)
7c: 98 1f 00 08 stb r0,8(r31)
80: 99 3f 00 09 stb r9,9(r31)
84: 99 7f 00 0a stb r11,10(r31)
88: 88 1f 00 08 lbz r0,8(r31)
8c: a1 3f 00 09 lhz r9,9(r31) <--- Odd alignment
90: 98 1f 00 20 stb r0,32(r31)
94: b1 3f 00 21 sth r9,33(r31) <--- Odd alignment
98: 38 1f 00 20 addi r0,r31,32
9c: 7c 03 03 78 mr r3,r0
a0: 48 00 00 01 bl a0 <bar1::doFoo()+0x60>
a4: 81 61 00 00 lwz r11,0(r1)
a8: 80 0b 00 04 lwz r0,4(r11)
ac: 7c 08 03 a6 mtlr r0
b0: 83 eb ff fc lwz r31,-4(r11)
b4: 7d 61 5b 78 mr r1,r11
b8: 4e 80 00 20 blr
000000bc <main>:
bc: 94 21 ff d8 stwu r1,-40(r1)
c0: 7c 08 02 a6 mflr r0
c4: 93 e1 00 24 stw r31,36(r1)
c8: 90 01 00 2c stw r0,44(r1)
cc: 7c 3f 0b 78 mr r31,r1
d0: 90 7f 00 18 stw r3,24(r31)
d4: 90 9f 00 1c stw r4,28(r31)
d8: 48 00 00 01 bl d8 <main+0x1c>
dc: 38 7f 00 08 addi r3,r31,8
e0: 48 00 00 01 bl e0 <main+0x24>
e4: 38 00 00 00 li r0,0
e8: 7c 03 03 78 mr r3,r0
ec: 81 61 00 00 lwz r11,0(r1)
f0: 80 0b 00 04 lwz r0,4(r11)
f4: 7c 08 03 a6 mtlr r0
f8: 83 eb ff fc lwz r31,-4(r11)
fc: 7d 61 5b 78 mr r1,r11
100: 4e 80 00 20 blr
(4)>
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
` (9 preceding siblings ...)
2005-08-24 16:00 ` mcvick_e at iname dot com
@ 2005-08-26 23:56 ` dje at gcc dot gnu dot org
2005-08-27 0:11 ` dje at gcc dot gnu dot org
` (4 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: dje at gcc dot gnu dot org @ 2005-08-26 23:56 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From dje at gcc dot gnu dot org 2005-08-26 23:55 -------
Confirmed.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Ever Confirmed| |1
Last reconfirmed|0000-00-00 00:00:00 |2005-08-26 23:55:03
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
` (10 preceding siblings ...)
2005-08-26 23:56 ` dje at gcc dot gnu dot org
@ 2005-08-27 0:11 ` dje at gcc dot gnu dot org
2005-08-27 15:46 ` cvs-commit at gcc dot gnu dot org
` (3 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: dje at gcc dot gnu dot org @ 2005-08-27 0:11 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From dje at gcc dot gnu dot org 2005-08-26 23:55 -------
rs6000.c:expand_block_move() is losing the alignment because of a typo/thinko in
the decision tree.
--
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |dje at gcc dot gnu dot org
|dot org |
Status|NEW |ASSIGNED
Last reconfirmed|2005-08-26 23:55:03 |2005-08-26 23:55:57
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
` (11 preceding siblings ...)
2005-08-27 0:11 ` dje at gcc dot gnu dot org
@ 2005-08-27 15:46 ` cvs-commit at gcc dot gnu dot org
2005-08-27 16:59 ` cvs-commit at gcc dot gnu dot org
` (2 subsequent siblings)
15 siblings, 0 replies; 17+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2005-08-27 15:46 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From cvs-commit at gcc dot gnu dot org 2005-08-27 15:44 -------
Subject: Bug 23539
CVSROOT: /cvs/gcc
Module name: gcc
Changes by: dje@gcc.gnu.org 2005-08-27 15:44:28
Modified files:
gcc : ChangeLog
gcc/config/rs6000: rs6000.c
Log message:
PR target/23539
* config/rs6000/rs6000.c (expand_block_clear): Use HImode when
bytes >= 2 not bytes == 2.
(expand_block_move): Same.
Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.9838&r2=2.9839
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/rs6000/rs6000.c.diff?cvsroot=gcc&r1=1.862&r2=1.863
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
` (12 preceding siblings ...)
2005-08-27 15:46 ` cvs-commit at gcc dot gnu dot org
@ 2005-08-27 16:59 ` cvs-commit at gcc dot gnu dot org
2005-08-31 14:31 ` cvs-commit at gcc dot gnu dot org
2005-08-31 15:08 ` dje at gcc dot gnu dot org
15 siblings, 0 replies; 17+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2005-08-27 16:59 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From cvs-commit at gcc dot gnu dot org 2005-08-27 15:46 -------
Subject: Bug 23539
CVSROOT: /cvs/gcc
Module name: gcc
Branch: gcc-4_0-branch
Changes by: dje@gcc.gnu.org 2005-08-27 15:46:45
Modified files:
gcc : ChangeLog
gcc/config/rs6000: rs6000.c
Log message:
PR target/23539
* config/rs6000/rs6000.c (expand_block_clear): Use HImode when
bytes >= 2 not bytes == 2.
(expand_block_move): Same.
Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=2.7592.2.396&r2=2.7592.2.397
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/rs6000/rs6000.c.diff?cvsroot=gcc&only_with_tag=gcc-4_0-branch&r1=1.788.2.9&r2=1.788.2.10
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
` (13 preceding siblings ...)
2005-08-27 16:59 ` cvs-commit at gcc dot gnu dot org
@ 2005-08-31 14:31 ` cvs-commit at gcc dot gnu dot org
2005-08-31 15:08 ` dje at gcc dot gnu dot org
15 siblings, 0 replies; 17+ messages in thread
From: cvs-commit at gcc dot gnu dot org @ 2005-08-31 14:31 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From cvs-commit at gcc dot gnu dot org 2005-08-31 14:29 -------
Subject: Bug 23539
CVSROOT: /cvs/gcc
Module name: gcc
Branch: gcc-3_4-branch
Changes by: dje@gcc.gnu.org 2005-08-31 14:28:46
Modified files:
gcc : ChangeLog
gcc/config/rs6000: rs6000.c
Log message:
PR target/23539
Backport from mainline:
2005-08-27 David Edelsohn <edelsohn@gnu.org>
* config/rs6000/rs6000.c (expand_block_move): Use HImode when
bytes >= 2 not bytes == 2.
Patches:
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=2.2326.2.909&r2=2.2326.2.910
http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/rs6000/rs6000.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.576.2.45&r2=1.576.2.46
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
* [Bug target/23539] C & C++ compiler generating misaligned references regardless of compiler flags
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
` (14 preceding siblings ...)
2005-08-31 14:31 ` cvs-commit at gcc dot gnu dot org
@ 2005-08-31 15:08 ` dje at gcc dot gnu dot org
15 siblings, 0 replies; 17+ messages in thread
From: dje at gcc dot gnu dot org @ 2005-08-31 15:08 UTC (permalink / raw)
To: gcc-bugs
------- Additional Comments From dje at gcc dot gnu dot org 2005-08-31 15:07 -------
Patch applied to mainline. Backported to 3.4 and 4.0 branches.
--
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |RESOLVED
Known to fail| |3.4.4 4.0.1
Known to work| |3.4.5 4.0.2
Resolution| |FIXED
Target Milestone|--- |3.4.5
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23539
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2005-08-31 15:08 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-08-23 21:23 [Bug c++/23539] New: C & C++ compiler generating misaligned references regardless of compiler flags mcvick_e at iname dot com
2005-08-23 21:30 ` [Bug target/23539] " pinskia at gcc dot gnu dot org
2005-08-23 22:24 ` mcvick_e at iname dot com
2005-08-23 22:30 ` mcvick_e at iname dot com
2005-08-23 23:05 ` pinskia at gcc dot gnu dot org
2005-08-23 23:35 ` steven at gcc dot gnu dot org
2005-08-24 0:20 ` mcvick_e at iname dot com
2005-08-24 0:28 ` mcvick_e at iname dot com
2005-08-24 0:40 ` pinskia at gcc dot gnu dot org
2005-08-24 3:53 ` mcvick_e at iname dot com
2005-08-24 16:00 ` mcvick_e at iname dot com
2005-08-26 23:56 ` dje at gcc dot gnu dot org
2005-08-27 0:11 ` dje at gcc dot gnu dot org
2005-08-27 15:46 ` cvs-commit at gcc dot gnu dot org
2005-08-27 16:59 ` cvs-commit at gcc dot gnu dot org
2005-08-31 14:31 ` cvs-commit at gcc dot gnu dot org
2005-08-31 15:08 ` dje at gcc dot gnu dot org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).