https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113384

--- Comment #3 from John David Anglin <danglin at gcc dot gnu.org> ---
These fails only when generating PA 2.0 code.  The fails don't occur when
generating the default PA 1.1 code.

Wrong code is generated for this line in dependency_58.f90:
        b%im = a%im - 0.5

b%re is set instead of b%im.

We have the following PA 1.1 assembly code:
   0x00010ab0 <MAIN__+852>:     fsub,sgl fr23,fr22,fr22
   0x00010ab4 <MAIN__+856>:     ldo 64(r20),r20
   0x00010ab8 <MAIN__+860>:     depw,z r20,28,29,r20
   0x00010abc <MAIN__+864>:     ldo 8(r3),r21
   0x00010ac0 <MAIN__+868>:     add,l r21,r20,r20
   0x00010ac4 <MAIN__+872>:     fstw fr22,0(r20)

This is PA 1.1 code:
        fsub,sgl %fr23L,%fr22L,%fr22L
        ldo 8(%r3),%r20
        ldo 800(%r20),%r20
        ldo 4(%r20),%r20
        zdep %r21,28,29,%r21
        addl %r21,%r20,%r20
        fstws %fr22L,0(%r20)

We miss this ldo instruction in PA 2.0:
        ldo 4(%r20),%r20

It adds 4 to the address to access the imaginary part of b.

Reply via email to