public inbox for linux-ia64@vger.kernel.org
 help / color / mirror / Atom feed
* [Linux-ia64] Re: gas dependency checker bug [forwarded message from Xavier Leroy]
@ 2000-07-07  9:09 Xavier Leroy
  2000-07-07 19:50 ` Jim Wilson
  2000-08-16  2:27 ` Jim Wilson
  0 siblings, 2 replies; 3+ messages in thread
From: Xavier Leroy @ 2000-07-07  9:09 UTC (permalink / raw)
  To: linux-ia64

> Attached below is a bug report for gas.  I did verify that gas indeed
> fails to detect the RAW hazard on r2 in the sample code.

While we're at it, I found a third case of missed RAW dependency.
The IA64 has a special bypass allowing predicates set by e.g. a "cmp"
instruction to be used to predicate a branch in the same instruction
group:

        cmp.eq p6, p7 = r32, r33
        (p6) br ...

However, non-branch instructions predicated on the result of the "cmp"
cannot be executed in the same instruction group.  gas doesn't realize
this.  Consider:

[xleroy@tl2 essais]$ more preds.s
        .global f#
        .proc   f#
f:
        cmp.eq p6, p7 = r32, r33
        (p6) mov r8 = 1
        (p7) mov r8 = 0
        br.ret.sptk b0

        .endp f#

[xleroy@tl2 essais]$ as -xauto -xdebug preds.s
Checking cmp.eq for violations (line 4, 18/12)
Registering 'cmp.eq' resource usage
  Adding RAW 'PR%, % in 1 - 62' (7)
  Adding RAW 'PR%, % in 1 - 62' (6)
  Adding WAW 'PR%, % in 1 - 62' (7)
  Adding WAW 'PR%, % in 1 - 62' (6)
  Adding WAW 'PR%, % in 1 - 62' (7)
  Adding WAW 'PR%, % in 1 - 62' (6)
  Registering mutex on p6, p7
Checking mov for violations (line 5, 8/2)
Registering 'mov' resource usage
  Adding RAW 'GR%, % in 1 - 127' (8)
  Adding WAW 'GR%, % in 1 - 127' (8)
Checking mov for violations (line 6, 8/2)
Registering 'mov' resource usage
  Adding RAW 'GR%, % in 1 - 127' (8)
  Adding WAW 'GR%, % in 1 - 127' (8)
Checking br.ret.sptk for violations (line 7, 27/13)
Registering 'br.ret.sptk' resource usage
  Clearing register values
  Clearing mutex relation p6, p7
  Insn group break (w/stop)
  Insn group break (w/stop)
  Insn group break (w/stop)
  Insn group break (w/stop)

[xleroy@tl2 essais]$ objdump -d a.out  

a.out:     file format elf64-ia64-little

Disassembly of section .text:

0000000000000000 <f>:
   0:   00 30 80 42 07 b8       [MII]       cmp.eq p6,p7=r32,r33
   6:   81 08 00 00 c2 03             (p06) mov r8=1
   c:   01 00 00 84                   (p07) mov r8=r0
  10:   11 00 00 00 01 00       [MIB]       nop.m 0x0
  16:   00 00 00 02 00 80                   nop.i 0x0
  1c:   00 00 84 00                         br.ret.sptk.few b0;;

This is incorrect: there should be a stop after the cmp.eq.

Best regards,

- Xavier Leroy



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2000-08-16  2:27 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2000-07-07  9:09 [Linux-ia64] Re: gas dependency checker bug [forwarded message from Xavier Leroy] Xavier Leroy
2000-07-07 19:50 ` Jim Wilson
2000-08-16  2:27 ` Jim Wilson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox