|
From: | John Smirnios |
Subject: | Gas for IA64 does not correctly detect dependencies in auto mode |
Date: | Fri, 28 Mar 2003 14:35:50 -0500 |
When using auto mode for IA64 assembly, gas does not
correctly detect register dependencies. Binutils version: 2.13 OS: HPUX Itanium and Linux Itanium. Configuration name (on hpux):
"a64-hp-hpux11.22" Command line: gas -o foo.o foo.s Here is a trivial example (also attached as a foo.s): .text .auto .align32 foo: ldfs f8=[r32] stfd [r33]=f8 Clearly there is a read-after-write dependency between these
two instructions which will be put into the same bundle. Using objdump, the generated code
is as follows: foo.o: file format
elf32-ia64-hpux-big Disassembly of section
.text: 00000000 <foo>: 0: 19 40 00 40 10 18 [MMB] ldfs f8=[r32] 6: 00 40 84 30 33 00
stfd [r33]=f8 c: 00 00 00 20
nop.b 0x0;; 10: 00 04 00 00
00 00 [MII]
(p32) break.m 0x0 16: 02 00 00
00 00 01
(p08) break.i 0x0 1c: 00 00 00 0c
data8 0x1800000002 Gas did not generate a
bundle template with a stop (;;) between the load and the store. Without the
stop, the behaviour of this instruction bundle is
undefined. Using the Intel's ias for IA64, the following is
generated: Dump of file foo.obj File Type: COFF OBJECT foo: 0000000000000000:
0004000000333084400018104000400A ldfs
f8 = [r32] ;;
stfd
[r33] = f8
nop.i
0 Notice the stop (;;)
between the load and store. If the author of the IA64
gas support has a quick fix, I would appreciate a direct notification by email
if possible (address@hidden). Thanks, -john. |
foo.s
Description: Text document
[Prev in Thread] | Current Thread | [Next in Thread] |